@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 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.49.1...main)
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
- ## Radar 📡
2538
+ ## Ops 🏰
2539
2539
 
2540
- > [Dotenvx Radar](https://dotenvx.com/radar) is a commercial extension for [dotenvx](https://github.com/dotenvx/dotenvx).
2540
+ [![dotenvx-ops](https://dotenvx.com/dotenvx-ops-banner.png?v=2)](https://dotenvx.com/ops)
2541
2541
 
2542
- *Observe, version, and back up your environment variables at runtime.*
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 Radar
2548
+ 1. Install dotenvx-ops
2547
2549
 
2548
2550
  ```sh
2549
- $ curl -sfS https://dotenvx.sh/radar | 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-radar login
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 [Radar](https://dotenvx.com/radar).
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
- ![dotenvx-radar](https://dotenvx.com/radar/ui.png)
2573
+ ![dotenvx-ops](https://dotenvx.com/ops/ui.png)
2572
2574
 
2573
2575
  ### CLI
2574
2576
 
2575
2577
  <details><summary>`login`</summary><br>
2576
2578
 
2577
- Log in to [radar](https://dotenvx.com/radar).
2579
+ Log in to [Ops](https://dotenvx.com/ops).
2578
2580
 
2579
2581
  ```sh
2580
- $ dotenvx-radar login
2581
- press Enter to open [https://radar.dotenvx.com/login/device] and enter code [D9C1-03BC]... (Y/n)
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 [radar](https://dotenvx.com/radar).
2591
+ Log out of [Ops](https://dotenvx.com/ops).
2590
2592
 
2591
2593
  ```sh
2592
- $ dotenvx-radar logout
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 [radar](https://dotenvx.com/radar) - `on` or `off` (logged in or out).
2601
+ Check current status of [Ops](https://dotenvx.com/ops) - `on` or `off` (logged in or out).
2600
2602
 
2601
2603
  ```sh
2602
- $ dotenvx-radar status
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 [radar](https://dotenvx.com/radar) - `username`, `token`, and more.
2611
+ Check and configure various settings for [Ops](https://dotenvx.com/ops) - `username`, `token`, and more.
2610
2612
 
2611
2613
  ```sh
2612
- $ dotenvx-radar settings
2613
- Usage: dotenvx-radar settings [options] [command]
2614
+ $ dotenvx-ops settings
2615
+ Usage: dotenvx-ops settings [options] [command]
2614
2616
 
2615
2617
  ⚙️ settings
2616
2618
 
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.49.1",
2
+ "version": "1.50.1",
3
3
  "name": "@dotenvx/dotenvx",
4
4
  "description": "a secure dotenv–from the creator of `dotenv`",
5
5
  "author": "@motdotla",
@@ -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') {
@@ -44,7 +44,7 @@ program
44
44
  setLogLevel(options)
45
45
  })
46
46
 
47
- // for dynamic loading of dotenvx-radar, etc
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', ' radar 📡 radar')
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