@dotenvx/dotenvx 1.49.1 → 1.50.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.
- package/CHANGELOG.md +34 -1
- package/README.md +20 -18
- package/package.json +1 -1
- package/src/cli/actions/run.js +2 -0
- package/src/cli/dotenvx.js +2 -2
- package/src/lib/helpers/executeDynamic.js +25 -25
- package/src/lib/main.js +2 -0
- package/src/lib/services/ops.js +79 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,40 @@
|
|
|
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.
|
|
5
|
+
[Unreleased](https://github.com/dotenvx/dotenvx/compare/v1.50.1...main)
|
|
6
|
+
|
|
7
|
+
## [1.50.1](https://github.com/dotenvx/dotenvx/compare/v1.50.0...v1.50.1) (2025-09-18)
|
|
8
|
+
|
|
9
|
+
### Removed
|
|
10
|
+
|
|
11
|
+
* Remove listed command to `radar` (now `ops`) ([#678](https://github.com/dotenvx/dotenvx/pull/678))
|
|
12
|
+
|
|
13
|
+
## [1.50.0](https://github.com/dotenvx/dotenvx/compare/v1.49.1...v1.50.0) (2025-09-18)
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
* Add optional `dotenvx ops` command ([#677](https://github.com/dotenvx/dotenvx/pull/677))
|
|
18
|
+
* Ops is a coming rename of Radar. Radar will become a feature inside ops.
|
|
19
|
+
* With `dotenvx ops` use dotenvx across your team, infrastructure, agents, and more.
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
_______________________________________________________________________
|
|
23
|
+
| |
|
|
24
|
+
| Dotenvx Ops: Commercial Tooling for Dotenvx |
|
|
25
|
+
| |
|
|
26
|
+
| ░▒▓██████▓▒░░▒▓███████▓▒░ ░▒▓███████▓▒░ |
|
|
27
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ |
|
|
28
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ |
|
|
29
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░ |
|
|
30
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ |
|
|
31
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ |
|
|
32
|
+
| ░▒▓██████▓▒░░▒▓█▓▒░ ░▒▓███████▓▒░ |
|
|
33
|
+
| |
|
|
34
|
+
| Use dotenvx across your team, infrastructure, agents, and more. |
|
|
35
|
+
| |
|
|
36
|
+
| Learn more at https://dotenvx.com/ops |
|
|
37
|
+
|_______________________________________________________________________|
|
|
38
|
+
```
|
|
6
39
|
|
|
7
40
|
## [1.49.1](https://github.com/dotenvx/dotenvx/compare/v1.49.0...v1.49.1) (2025-09-15)
|
|
8
41
|
|
package/README.md
CHANGED
|
@@ -2535,24 +2535,26 @@ This is known as *Decryption at Access* and is written about in [the whitepaper]
|
|
|
2535
2535
|
|
|
2536
2536
|
|
|
2537
2537
|
|
|
2538
|
-
##
|
|
2538
|
+
## Ops 🏰
|
|
2539
2539
|
|
|
2540
|
-
|
|
2540
|
+
[](https://dotenvx.com/ops)
|
|
2541
2541
|
|
|
2542
|
-
|
|
2542
|
+
> [Dotenvx Ops](https://dotenvx.com/ops) is optional commercial tooling for [dotenvx](https://github.com/dotenvx/dotenvx).
|
|
2543
|
+
|
|
2544
|
+
*Use dotenvx across your team, infrastructure, agents, and more.*
|
|
2543
2545
|
|
|
2544
2546
|
### Usage
|
|
2545
2547
|
|
|
2546
|
-
1. Install
|
|
2548
|
+
1. Install dotenvx-ops
|
|
2547
2549
|
|
|
2548
2550
|
```sh
|
|
2549
|
-
$ curl -sfS https://dotenvx.sh/
|
|
2551
|
+
$ curl -sfS https://dotenvx.sh/ops | sh
|
|
2550
2552
|
```
|
|
2551
2553
|
|
|
2552
2554
|
2. Log in
|
|
2553
2555
|
|
|
2554
2556
|
```sh
|
|
2555
|
-
$ dotenvx-
|
|
2557
|
+
$ dotenvx-ops login
|
|
2556
2558
|
✔ logged in [username]
|
|
2557
2559
|
```
|
|
2558
2560
|
|
|
@@ -2564,21 +2566,21 @@ $ dotenvx run -- yourcommand
|
|
|
2564
2566
|
[dotenvx@1.0.0] injecting env (1) from .env
|
|
2565
2567
|
```
|
|
2566
2568
|
|
|
2567
|
-
That's it! Your environment variables are auto-observed and backed up by [
|
|
2569
|
+
That's it! Your environment variables are auto-observed and backed up by [Dotenvx Ops](https://dotenvx.com/ops) radar feature.
|
|
2568
2570
|
|
|
2569
2571
|
### UI
|
|
2570
2572
|
|
|
2571
|
-

|
|
2572
2574
|
|
|
2573
2575
|
### CLI
|
|
2574
2576
|
|
|
2575
2577
|
<details><summary>`login`</summary><br>
|
|
2576
2578
|
|
|
2577
|
-
Log in to [
|
|
2579
|
+
Log in to [Ops](https://dotenvx.com/ops).
|
|
2578
2580
|
|
|
2579
2581
|
```sh
|
|
2580
|
-
$ dotenvx-
|
|
2581
|
-
press Enter to open [https://
|
|
2582
|
+
$ dotenvx-ops login
|
|
2583
|
+
press Enter to open [https://ops.dotenvx.com/login/device] and enter code [D9C1-03BC]... (Y/n)
|
|
2582
2584
|
⠹ waiting on browser authorization
|
|
2583
2585
|
✔ logged in [username] to this device and activated token [dxo_6kjPifI…]
|
|
2584
2586
|
```
|
|
@@ -2586,31 +2588,31 @@ press Enter to open [https://radar.dotenvx.com/login/device] and enter code [D9C
|
|
|
2586
2588
|
</details>
|
|
2587
2589
|
<details><summary>`logout`</summary><br>
|
|
2588
2590
|
|
|
2589
|
-
Log out of [
|
|
2591
|
+
Log out of [Ops](https://dotenvx.com/ops).
|
|
2590
2592
|
|
|
2591
2593
|
```sh
|
|
2592
|
-
$ dotenvx-
|
|
2594
|
+
$ dotenvx-ops logout
|
|
2593
2595
|
✔ logged out [username] from this device and revoked token [dxo_5ZrwRXV…]
|
|
2594
2596
|
```
|
|
2595
2597
|
|
|
2596
2598
|
</details>
|
|
2597
2599
|
<details><summary>`status`</summary><br>
|
|
2598
2600
|
|
|
2599
|
-
Check current status of [
|
|
2601
|
+
Check current status of [Ops](https://dotenvx.com/ops) - `on` or `off` (logged in or out).
|
|
2600
2602
|
|
|
2601
2603
|
```sh
|
|
2602
|
-
$ dotenvx-
|
|
2604
|
+
$ dotenvx-ops status
|
|
2603
2605
|
on
|
|
2604
2606
|
```
|
|
2605
2607
|
|
|
2606
2608
|
</details>
|
|
2607
2609
|
<details><summary>`settings`</summary><br>
|
|
2608
2610
|
|
|
2609
|
-
Check and configure various settings for [
|
|
2611
|
+
Check and configure various settings for [Ops](https://dotenvx.com/ops) - `username`, `token`, and more.
|
|
2610
2612
|
|
|
2611
2613
|
```sh
|
|
2612
|
-
$ dotenvx-
|
|
2613
|
-
Usage: dotenvx-
|
|
2614
|
+
$ dotenvx-ops settings
|
|
2615
|
+
Usage: dotenvx-ops settings [options] [command]
|
|
2614
2616
|
|
|
2615
2617
|
⚙️ settings
|
|
2616
2618
|
|
package/package.json
CHANGED
package/src/cli/actions/run.js
CHANGED
|
@@ -4,6 +4,7 @@ const { logger } = require('./../../shared/logger')
|
|
|
4
4
|
const executeCommand = require('./../../lib/helpers/executeCommand')
|
|
5
5
|
const Run = require('./../../lib/services/run')
|
|
6
6
|
const Radar = require('./../../lib/services/radar')
|
|
7
|
+
const Ops = require('./../../lib/services/ops')
|
|
7
8
|
|
|
8
9
|
const conventions = require('./../../lib/helpers/conventions')
|
|
9
10
|
const DeprecationNotice = require('./../../lib/helpers/deprecationNotice')
|
|
@@ -51,6 +52,7 @@ async function run () {
|
|
|
51
52
|
} = new Run(envs, options.overload, process.env.DOTENV_KEY, process.env, options.envKeysFile).run()
|
|
52
53
|
|
|
53
54
|
try { new Radar().observe({ beforeEnv, processedEnvs, afterEnv }) } catch {}
|
|
55
|
+
try { new Ops().observe({ beforeEnv, processedEnvs, afterEnv }) } catch {}
|
|
54
56
|
|
|
55
57
|
for (const processedEnv of processedEnvs) {
|
|
56
58
|
if (processedEnv.type === 'envVaultFile') {
|
package/src/cli/dotenvx.js
CHANGED
|
@@ -44,7 +44,7 @@ program
|
|
|
44
44
|
setLogLevel(options)
|
|
45
45
|
})
|
|
46
46
|
|
|
47
|
-
// for dynamic loading of dotenvx-
|
|
47
|
+
// for dynamic loading of dotenvx-ops, etc
|
|
48
48
|
program
|
|
49
49
|
.argument('[command]', 'dynamic command')
|
|
50
50
|
.argument('[args...]', 'dynamic command arguments')
|
|
@@ -200,7 +200,7 @@ program.command('help [command]')
|
|
|
200
200
|
// dotenvx pro
|
|
201
201
|
program.addHelpText('after', ' ')
|
|
202
202
|
program.addHelpText('after', 'Advanced: ')
|
|
203
|
-
program.addHelpText('after', '
|
|
203
|
+
program.addHelpText('after', ' ops 🏰 ops')
|
|
204
204
|
program.addHelpText('after', ' ext 🔌 extensions')
|
|
205
205
|
|
|
206
206
|
// dotenvx ext
|
|
@@ -23,33 +23,33 @@ function executeDynamic (program, command, rawArgs) {
|
|
|
23
23
|
const result = childProcess.spawnSync(`dotenvx-${command}`, forwardedArgs, { stdio: 'inherit', env })
|
|
24
24
|
if (result.error) {
|
|
25
25
|
if (command === 'pro') {
|
|
26
|
-
const pro = `_______________________________________________________________
|
|
27
|
-
| |
|
|
28
|
-
| For small and medium businesses |
|
|
29
|
-
| |
|
|
30
|
-
| | | | | |
|
|
31
|
-
| __| | ___ | |_ ___ _ ____ ____ __ _ __ _ __ ___ |
|
|
32
|
-
| / _\` |/ _ \\| __/ _ \\ '_ \\ \\ / /\\ \\/ / | '_ \\| '__/ _ \\ |
|
|
33
|
-
| | (_| | (_) | || __/ | | \\ V / > < | |_) | | | (_) | |
|
|
34
|
-
| \\__,_|\\___/ \\__\\___|_| |_|\\_/ /_/\\_\\ | .__/|_| \\___/ |
|
|
35
|
-
| | | |
|
|
36
|
-
| |_| |
|
|
37
|
-
| ## learn more on dotenvx 🟨 |
|
|
38
|
-
| |
|
|
39
|
-
| >> https://dotenvx.com/pricing |
|
|
40
|
-
| |
|
|
41
|
-
| ## subscribe on github to be notified 📣 |
|
|
42
|
-
| |
|
|
43
|
-
| >> https://github.com/dotenvx/dotenvx/issues/259 |
|
|
44
|
-
| |
|
|
45
|
-
| ----------------------------------------------------------- |
|
|
46
|
-
| - thank you for using dotenvx! - @motdotla |
|
|
47
|
-
|_____________________________________________________________|`
|
|
48
|
-
|
|
49
|
-
console.log(pro)
|
|
50
|
-
console.log('')
|
|
51
26
|
logger.warn(`[INSTALLATION_NEEDED] install dotenvx-${command} to use [dotenvx ${command}] commands 🏆`)
|
|
52
27
|
logger.help('? see installation instructions [https://github.com/dotenvx/dotenvx-pro]')
|
|
28
|
+
} else if (command === 'ops') {
|
|
29
|
+
const ops = ` _______________________________________________________________________
|
|
30
|
+
| |
|
|
31
|
+
| Dotenvx Ops: Commercial Tooling for Dotenvx |
|
|
32
|
+
| |
|
|
33
|
+
| ░▒▓██████▓▒░░▒▓███████▓▒░ ░▒▓███████▓▒░ |
|
|
34
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ |
|
|
35
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ |
|
|
36
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░ |
|
|
37
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ |
|
|
38
|
+
| ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ |
|
|
39
|
+
| ░▒▓██████▓▒░░▒▓█▓▒░ ░▒▓███████▓▒░ |
|
|
40
|
+
| |
|
|
41
|
+
| Use dotenvx across your team, infrastructure, agents, and more. |
|
|
42
|
+
| |
|
|
43
|
+
| Learn more at https://dotenvx.com/ops |
|
|
44
|
+
| |
|
|
45
|
+
| --------------------------------------------------------------------- |
|
|
46
|
+
| - thank you for using dotenvx! - @motdotla |
|
|
47
|
+
|_______________________________________________________________________|`
|
|
48
|
+
|
|
49
|
+
console.log(ops)
|
|
50
|
+
console.log('')
|
|
51
|
+
logger.warn(`[INSTALLATION_NEEDED] install dotenvx-${command} to use [dotenvx ${command}] 🏰`)
|
|
52
|
+
logger.help('? see installation instructions [https://dotenvx.com/ops]')
|
|
53
53
|
} else if (command === 'radar') {
|
|
54
54
|
const radar = ` _______________________________________________________________________
|
|
55
55
|
| |
|
package/src/lib/main.js
CHANGED
|
@@ -13,6 +13,7 @@ const Get = require('./services/get')
|
|
|
13
13
|
const Keypair = require('./services/keypair')
|
|
14
14
|
const Genexample = require('./services/genexample')
|
|
15
15
|
const Radar = require('./services/radar')
|
|
16
|
+
const Ops = require('./services/ops')
|
|
16
17
|
|
|
17
18
|
// helpers
|
|
18
19
|
const buildEnvs = require('./helpers/buildEnvs')
|
|
@@ -63,6 +64,7 @@ const config = function (options = {}) {
|
|
|
63
64
|
} = new Run(envs, overload, DOTENV_KEY, processEnv, envKeysFile).run()
|
|
64
65
|
|
|
65
66
|
try { new Radar().observe({ beforeEnv, processedEnvs, afterEnv }) } catch {}
|
|
67
|
+
try { new Ops().observe({ beforeEnv, processedEnvs, afterEnv }) } catch {}
|
|
66
68
|
|
|
67
69
|
let lastError
|
|
68
70
|
/** @type {Record<string, string>} */
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const path = require('path')
|
|
2
|
+
const childProcess = require('child_process')
|
|
3
|
+
|
|
4
|
+
const { logger } = require('./../../shared/logger')
|
|
5
|
+
|
|
6
|
+
class Ops {
|
|
7
|
+
constructor () {
|
|
8
|
+
this.opsLib = null
|
|
9
|
+
|
|
10
|
+
// check npm lib
|
|
11
|
+
try {
|
|
12
|
+
this.opsLib = this._opsNpm()
|
|
13
|
+
logger.successv(`📡 radar: ${this.opsLib.status}`)
|
|
14
|
+
} catch (e) {
|
|
15
|
+
// check binary cli
|
|
16
|
+
try {
|
|
17
|
+
this.opsLib = this._opsCli()
|
|
18
|
+
logger.successv(`📡 radar: ${this.opsLib.status}`)
|
|
19
|
+
} catch (_e2) {
|
|
20
|
+
// noop
|
|
21
|
+
}
|
|
22
|
+
// noop
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
observe (payload) {
|
|
27
|
+
if (this.opsLib && this.opsLib.status !== 'off') {
|
|
28
|
+
const encoded = this.encode(payload)
|
|
29
|
+
this.opsLib.observe(encoded)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
encode (payload) {
|
|
34
|
+
return Buffer.from(JSON.stringify(payload)).toString('base64')
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
_opsNpm () {
|
|
38
|
+
const fallbackBin = path.resolve(process.cwd(), 'node_modules/.bin/dotenvx-ops')
|
|
39
|
+
const status = childProcess.execSync(`${fallbackBin} status`, { stdio: ['pipe', 'pipe', 'ignore'] })
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
status: status.toString().trim(),
|
|
43
|
+
observe: (encoded) => {
|
|
44
|
+
try {
|
|
45
|
+
const subprocess = childProcess.spawn(fallbackBin, ['observe', encoded], {
|
|
46
|
+
stdio: 'ignore',
|
|
47
|
+
detached: true
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
subprocess.unref() // let it run independently
|
|
51
|
+
} catch (e) {
|
|
52
|
+
// noop
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
_opsCli () {
|
|
59
|
+
const status = childProcess.execSync('dotenvx-ops status', { stdio: ['pipe', 'pipe', 'ignore'] })
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
status: status.toString().trim(),
|
|
63
|
+
observe: (encoded) => {
|
|
64
|
+
try {
|
|
65
|
+
const subprocess = childProcess.spawn('dotenvx-ops', ['observe', encoded], {
|
|
66
|
+
stdio: 'ignore',
|
|
67
|
+
detached: true
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
subprocess.unref() // let it run independently
|
|
71
|
+
} catch (e) {
|
|
72
|
+
// noop
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
module.exports = Ops
|