@dotenvx/dotenvx-vlt 0.49.0

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.
Files changed (125) hide show
  1. package/CHANGELOG.md +652 -0
  2. package/LICENSE +71 -0
  3. package/README.md +11 -0
  4. package/package.json +77 -0
  5. package/src/cli/actions/armor/down.js +37 -0
  6. package/src/cli/actions/armor/move.js +42 -0
  7. package/src/cli/actions/armor/pull.js +37 -0
  8. package/src/cli/actions/armor/push.js +37 -0
  9. package/src/cli/actions/armor/rotate.js +25 -0
  10. package/src/cli/actions/armor/up.js +37 -0
  11. package/src/cli/actions/backup.js +93 -0
  12. package/src/cli/actions/gateway/start.js +17 -0
  13. package/src/cli/actions/get.js +34 -0
  14. package/src/cli/actions/keypair.js +59 -0
  15. package/src/cli/actions/login.js +110 -0
  16. package/src/cli/actions/logout.js +36 -0
  17. package/src/cli/actions/observe.js +36 -0
  18. package/src/cli/actions/open.js +37 -0
  19. package/src/cli/actions/rotate/github/connect.js +84 -0
  20. package/src/cli/actions/rotate/npm/connect.js +84 -0
  21. package/src/cli/actions/rotate/openai/connect.js +84 -0
  22. package/src/cli/actions/rotate.js +44 -0
  23. package/src/cli/actions/set.js +34 -0
  24. package/src/cli/actions/settings/device.js +24 -0
  25. package/src/cli/actions/settings/hostname.js +20 -0
  26. package/src/cli/actions/settings/off.js +17 -0
  27. package/src/cli/actions/settings/on.js +17 -0
  28. package/src/cli/actions/settings/path.js +21 -0
  29. package/src/cli/actions/settings/token.js +24 -0
  30. package/src/cli/actions/settings/username.js +22 -0
  31. package/src/cli/actions/status.js +13 -0
  32. package/src/cli/actions/sync.js +104 -0
  33. package/src/cli/commands/armor.js +73 -0
  34. package/src/cli/commands/gateway.js +16 -0
  35. package/src/cli/commands/rotate/github.js +26 -0
  36. package/src/cli/commands/rotate/npm.js +26 -0
  37. package/src/cli/commands/rotate/openai.js +26 -0
  38. package/src/cli/commands/rotate.js +32 -0
  39. package/src/cli/commands/settings.js +60 -0
  40. package/src/cli/dotenvx-ops.js +163 -0
  41. package/src/cli/postinstall.js +16 -0
  42. package/src/db/device.js +73 -0
  43. package/src/db/session.js +193 -0
  44. package/src/lib/api/getAccount.js +32 -0
  45. package/src/lib/api/getSynchronization.js +34 -0
  46. package/src/lib/api/getVersion.js +24 -0
  47. package/src/lib/api/postArmorDown.js +48 -0
  48. package/src/lib/api/postArmorMove.js +48 -0
  49. package/src/lib/api/postArmorPull.js +48 -0
  50. package/src/lib/api/postArmorPush.js +48 -0
  51. package/src/lib/api/postArmorUp.js +51 -0
  52. package/src/lib/api/postBackup.js +68 -0
  53. package/src/lib/api/postGet.js +37 -0
  54. package/src/lib/api/postKeypair.js +60 -0
  55. package/src/lib/api/postLogout.js +34 -0
  56. package/src/lib/api/postOauthDeviceCode.js +45 -0
  57. package/src/lib/api/postOauthToken.js +38 -0
  58. package/src/lib/api/postObserve.js +62 -0
  59. package/src/lib/api/postRotate.js +39 -0
  60. package/src/lib/api/postRotateConnect.js +54 -0
  61. package/src/lib/api/postSet.js +43 -0
  62. package/src/lib/api/postSync.js +68 -0
  63. package/src/lib/helpers/armoredKeyDisplay.js +10 -0
  64. package/src/lib/helpers/buildApiError.js +16 -0
  65. package/src/lib/helpers/buildOauthError.js +13 -0
  66. package/src/lib/helpers/canonicalEnvFilename.js +13 -0
  67. package/src/lib/helpers/clipboardy/fallbacks/linux/xsel +0 -0
  68. package/src/lib/helpers/clipboardy/fallbacks/windows/clipboard_i686.exe +0 -0
  69. package/src/lib/helpers/clipboardy/fallbacks/windows/clipboard_x86_64.exe +0 -0
  70. package/src/lib/helpers/clipboardy/linux.js +57 -0
  71. package/src/lib/helpers/clipboardy/macos.js +14 -0
  72. package/src/lib/helpers/clipboardy/termux.js +41 -0
  73. package/src/lib/helpers/clipboardy/windows.js +16 -0
  74. package/src/lib/helpers/clipboardy.js +51 -0
  75. package/src/lib/helpers/confirm.js +17 -0
  76. package/src/lib/helpers/createSpinner.js +101 -0
  77. package/src/lib/helpers/createSpinner2.js +24 -0
  78. package/src/lib/helpers/decryptValue.js +10 -0
  79. package/src/lib/helpers/dotenvxProjectId.js +36 -0
  80. package/src/lib/helpers/encryptValue.js +9 -0
  81. package/src/lib/helpers/errors.js +30 -0
  82. package/src/lib/helpers/formatCode.js +11 -0
  83. package/src/lib/helpers/gitBranch.js +13 -0
  84. package/src/lib/helpers/gitUrl.js +13 -0
  85. package/src/lib/helpers/http.js +17 -0
  86. package/src/lib/helpers/jsonToEnv.js +7 -0
  87. package/src/lib/helpers/keyNamesForEnvFile.js +43 -0
  88. package/src/lib/helpers/keypairMetadata.js +88 -0
  89. package/src/lib/helpers/likelyUpdateCommand.js +33 -0
  90. package/src/lib/helpers/localKeypair.js +12 -0
  91. package/src/lib/helpers/mask.js +12 -0
  92. package/src/lib/helpers/normalizePath.js +5 -0
  93. package/src/lib/helpers/normalizeToken.js +5 -0
  94. package/src/lib/helpers/openUrl.js +7 -0
  95. package/src/lib/helpers/packageJson.js +3 -0
  96. package/src/lib/helpers/playwrightConnect.js +29 -0
  97. package/src/lib/helpers/pluralize.js +10 -0
  98. package/src/lib/helpers/prompts.js +68 -0
  99. package/src/lib/helpers/removeEnvKey.js +50 -0
  100. package/src/lib/helpers/safeRealpath.js +13 -0
  101. package/src/lib/helpers/sha256File.js +9 -0
  102. package/src/lib/helpers/smartMask.js +11 -0
  103. package/src/lib/helpers/truncate.js +10 -0
  104. package/src/lib/helpers/upsertEnvKey.js +61 -0
  105. package/src/lib/main.d.ts +152 -0
  106. package/src/lib/main.js +114 -0
  107. package/src/lib/services/armorDown.js +77 -0
  108. package/src/lib/services/armorMove.js +54 -0
  109. package/src/lib/services/armorPull.js +77 -0
  110. package/src/lib/services/armorPush.js +82 -0
  111. package/src/lib/services/armorUp.js +79 -0
  112. package/src/lib/services/backup.js +105 -0
  113. package/src/lib/services/gatewayStart.js +132 -0
  114. package/src/lib/services/keypair.js +59 -0
  115. package/src/lib/services/loggedIn.js +24 -0
  116. package/src/lib/services/login.js +28 -0
  117. package/src/lib/services/loginPoll.js +43 -0
  118. package/src/lib/services/logout.js +28 -0
  119. package/src/lib/services/rotate.js +28 -0
  120. package/src/lib/services/rotateGithubConnect.js +56 -0
  121. package/src/lib/services/rotateNpmConnect.js +56 -0
  122. package/src/lib/services/rotateOpenaiConnect.js +60 -0
  123. package/src/lib/services/status.js +11 -0
  124. package/src/lib/services/sync.js +70 -0
  125. package/src/lib/services/syncConflict.js +36 -0
@@ -0,0 +1,110 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const Session = require('./../../db/session')
3
+
4
+ const Login = require('./../../lib/services/login')
5
+ const LoginPoll = require('./../../lib/services/loginPoll')
6
+
7
+ const clipboardy = require('./../../lib/helpers/clipboardy')
8
+ const createSpinner2 = require('../../lib/helpers/createSpinner2')
9
+ const formatCode = require('./../../lib/helpers/formatCode')
10
+ const openUrl = require('./../../lib/helpers/openUrl')
11
+
12
+ const FRAMES = ['◐', '◓', '◑', '◒']
13
+
14
+ function listenForOpenKey (onOpen) {
15
+ const stdin = process.stdin
16
+ if (!stdin.isTTY) return () => {}
17
+
18
+ const canSetRawMode = typeof stdin.setRawMode === 'function'
19
+ const wasRawMode = Boolean(stdin.isRaw)
20
+ let didHandleOpenChoice = false
21
+
22
+ const cleanup = () => {
23
+ stdin.off('data', onData)
24
+ if (canSetRawMode) stdin.setRawMode(wasRawMode)
25
+ stdin.pause()
26
+ }
27
+
28
+ const onData = (chunk) => {
29
+ const key = String(chunk)
30
+ const lower = key.toLowerCase()
31
+
32
+ if (key === '\u0003') { // Ctrl+C
33
+ cleanup()
34
+ process.kill(process.pid, 'SIGINT')
35
+ return
36
+ }
37
+
38
+ if (key === '\r' || key === '\n' || lower === 'y') {
39
+ if (!didHandleOpenChoice) {
40
+ didHandleOpenChoice = true
41
+ Promise.resolve(onOpen()).catch(() => {})
42
+ }
43
+ return
44
+ }
45
+
46
+ if (lower === 'n') {
47
+ cleanup()
48
+ process.kill(process.pid, 'SIGINT')
49
+ }
50
+ }
51
+
52
+ if (canSetRawMode) stdin.setRawMode(true)
53
+ stdin.resume()
54
+ stdin.on('data', onData)
55
+
56
+ return cleanup
57
+ }
58
+
59
+ async function login () {
60
+ const options = this.opts()
61
+ const spinner = await createSpinner2({ ...options, text: 'logging in', frames: FRAMES })
62
+
63
+ logger.debug(`options: ${JSON.stringify(options)}`)
64
+
65
+ const sesh = new Session()
66
+ await sesh.notifyUpdate()
67
+ const hostname = options.hostname || sesh.hostname()
68
+ let cleanupOpenKeyListener = () => {}
69
+
70
+ try {
71
+ const {
72
+ deviceCode,
73
+ userCode,
74
+ verificationUri,
75
+ verificationUriComplete,
76
+ interval
77
+ } = await new Login(hostname).run()
78
+
79
+ try { await clipboardy.write(userCode) } catch (_e) {}
80
+
81
+ const promptMessage = `◌ press Enter to open [${verificationUri}] and enter code [${formatCode(userCode)}]...`
82
+
83
+ logger.debug(`POST ${hostname} with deviceCode ${deviceCode} at interval ${interval}`)
84
+ logger.info(promptMessage)
85
+
86
+ // begin polling
87
+ const pollPromise = new LoginPoll(hostname, deviceCode, interval).run()
88
+ cleanupOpenKeyListener = listenForOpenKey(() => openUrl(verificationUriComplete))
89
+ const data = await pollPromise
90
+
91
+ cleanupOpenKeyListener()
92
+ if (spinner) spinner.stop()
93
+ logger.success(`◉ logged in (${data.username})`)
94
+ process.exit(0)
95
+ } catch (error) {
96
+ cleanupOpenKeyListener()
97
+ if (spinner) spinner.stop()
98
+ if (error.message) {
99
+ logger.error(error.message)
100
+ } else {
101
+ logger.error(error)
102
+ }
103
+ if (error.stack) {
104
+ logger.debug(error.stack)
105
+ }
106
+ process.exit(1)
107
+ }
108
+ }
109
+
110
+ module.exports = login
@@ -0,0 +1,36 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const Session = require('./../../db/session')
3
+
4
+ const createSpinner2 = require('../../lib/helpers/createSpinner2')
5
+ const Logout = require('./../../lib/services/logout')
6
+
7
+ const FRAMES = ['◐', '◓', '◑', '◒']
8
+
9
+ async function logout () {
10
+ const options = this.opts()
11
+ const spinner = await createSpinner2({ ...options, text: 'logging out', frames: FRAMES })
12
+
13
+ logger.debug(`options: ${JSON.stringify(options)}`)
14
+
15
+ const sesh = new Session()
16
+ const hostname = options.hostname || sesh.hostname()
17
+
18
+ try {
19
+ const data = await new Logout(hostname).run()
20
+ spinner.stop()
21
+ logger.success(`◌ logged out (${data.username})`)
22
+ } catch (error) {
23
+ spinner.stop()
24
+ if (error.message) {
25
+ logger.error(error.message)
26
+ } else {
27
+ logger.error(error)
28
+ }
29
+ if (error.stack) {
30
+ logger.debug(error.stack)
31
+ }
32
+ process.exit(1)
33
+ }
34
+ }
35
+
36
+ module.exports = logout
@@ -0,0 +1,36 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const Session = require('./../../db/session')
3
+
4
+ const main = require('./../../lib/main')
5
+
6
+ async function observe (base64) {
7
+ const commandArgs = this.args
8
+ logger.debug(`process command [${commandArgs.join(' ')}]`)
9
+
10
+ const options = this.opts()
11
+ logger.debug(`options: ${JSON.stringify(options)}`)
12
+
13
+ const sesh = new Session()
14
+ const hostname = options.hostname || sesh.hostname()
15
+ const token = options.token
16
+ const dotenvxProjectId = options.dotenvxProjectId
17
+
18
+ try {
19
+ await main.observe(base64, { hostname, token, dotenvxProjectId })
20
+ } catch (error) {
21
+ if (error.message) {
22
+ logger.error(error.message)
23
+ } else {
24
+ logger.error(error)
25
+ }
26
+ if (error.help) {
27
+ logger.help(error.help)
28
+ }
29
+ if (error.stack) {
30
+ logger.debug(error.stack)
31
+ }
32
+ // do not process exit 1 since that would exit dotenvx run --
33
+ }
34
+ }
35
+
36
+ module.exports = observe
@@ -0,0 +1,37 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const Session = require('./../../db/session')
3
+
4
+ const dotenvxProjectId = require('./../../lib/helpers/dotenvxProjectId')
5
+ const openUrl = require('./../../lib/helpers/openUrl')
6
+
7
+ async function open () {
8
+ // debug opts
9
+ const options = this.opts()
10
+ const sesh = new Session()
11
+ const hostname = options.hostname || sesh.hostname()
12
+
13
+ try {
14
+ const uid = dotenvxProjectId(this.cwd)
15
+ const url = `${hostname}/go/${uid}`
16
+
17
+ await openUrl(url)
18
+
19
+ logger.success(`✔ opened [${url}]`)
20
+ } catch (error) {
21
+ if (error.message) {
22
+ logger.error(error.message)
23
+ } else {
24
+ logger.error(error)
25
+ }
26
+ if (error.help) {
27
+ logger.help(error.help)
28
+ }
29
+ if (error.stack) {
30
+ logger.debug(error.stack)
31
+ }
32
+
33
+ process.exit(1)
34
+ }
35
+ }
36
+
37
+ module.exports = open
@@ -0,0 +1,84 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const prompts = require('../../../../lib/helpers/prompts')
3
+ const Session = require('./../../../../db/session')
4
+ const RotateGithubConnect = require('./../../../../lib/services/rotateGithubConnect')
5
+ const { createSpinner } = require('./../../../../lib/helpers/createSpinner')
6
+ const GetAccount = require('./../../../../lib/api/getAccount')
7
+
8
+ const spinner = createSpinner('waiting on browser completion')
9
+
10
+ async function connect () {
11
+ const options = this.opts()
12
+ logger.debug(`options: ${JSON.stringify(options)}`)
13
+
14
+ try {
15
+ const sesh = new Session()
16
+ const hostname = options.hostname || sesh.hostname()
17
+ const token = options.token || sesh.token()
18
+ let org = options.org
19
+ let username = options.username
20
+ let password = options.password
21
+ const email = options.email
22
+
23
+ // user must be logged in to use feature
24
+ const accountJson = await new GetAccount(hostname, token).run()
25
+
26
+ if (!org) {
27
+ const choices = accountJson.organizations.map(o => ({
28
+ name: o.provider_slug,
29
+ value: o.provider_slug
30
+ }))
31
+
32
+ if (choices.length === 1) {
33
+ org = choices[0].value // just use first choice
34
+ } else {
35
+ org = await prompts.select({
36
+ message: 'Select org',
37
+ choices
38
+ }, {
39
+ input: process.stdin,
40
+ output: process.stderr
41
+ })
42
+ }
43
+ }
44
+
45
+ if (!username) {
46
+ username = await prompts.input({ message: 'github username:' }, {
47
+ input: process.stdin,
48
+ output: process.stderr
49
+ })
50
+ }
51
+
52
+ if (!password) {
53
+ password = await prompts.password({ message: 'github password:' }, {
54
+ input: process.stdin,
55
+ output: process.stderr
56
+ })
57
+ }
58
+
59
+ spinner.start()
60
+
61
+ const { uid, url } = await new RotateGithubConnect(hostname, token, org, username, password, email).run()
62
+
63
+ spinner.stop()
64
+
65
+ logger.success(`✔ connected [${url}]`)
66
+ logger.help(`⮕ next run [dotenvx-ops rotate dotenvx://${uid}]`)
67
+ } catch (error) {
68
+ spinner.stop()
69
+ if (error.message) {
70
+ logger.error(error.message)
71
+ } else {
72
+ logger.error(error)
73
+ }
74
+ if (error.help) {
75
+ logger.help(error.help)
76
+ }
77
+ if (error.stack) {
78
+ logger.debug(error.stack)
79
+ }
80
+ process.exit(1)
81
+ }
82
+ }
83
+
84
+ module.exports = connect
@@ -0,0 +1,84 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const prompts = require('../../../../lib/helpers/prompts')
3
+ const Session = require('./../../../../db/session')
4
+ const RotateNpmConnect = require('./../../../../lib/services/rotateNpmConnect')
5
+ const { createSpinner } = require('./../../../../lib/helpers/createSpinner')
6
+ const GetAccount = require('./../../../../lib/api/getAccount')
7
+
8
+ const spinner = createSpinner('waiting on browser completion')
9
+
10
+ async function connect () {
11
+ const options = this.opts()
12
+ logger.debug(`options: ${JSON.stringify(options)}`)
13
+
14
+ try {
15
+ const sesh = new Session()
16
+ const hostname = options.hostname || sesh.hostname()
17
+ const token = options.token || sesh.token()
18
+ let org = options.org
19
+ let username = options.username
20
+ let password = options.password
21
+ const email = options.email
22
+
23
+ // user must be logged in to use feature
24
+ const accountJson = await new GetAccount(hostname, token).run()
25
+
26
+ if (!org) {
27
+ const choices = accountJson.organizations.map(o => ({
28
+ name: o.provider_slug,
29
+ value: o.provider_slug
30
+ }))
31
+
32
+ if (choices.length === 1) {
33
+ org = choices[0].value // just use first choice
34
+ } else {
35
+ org = await prompts.select({
36
+ message: 'Select org',
37
+ choices
38
+ }, {
39
+ input: process.stdin,
40
+ output: process.stderr
41
+ })
42
+ }
43
+ }
44
+
45
+ if (!username) {
46
+ username = await prompts.input({ message: 'npm username:' }, {
47
+ input: process.stdin,
48
+ output: process.stderr
49
+ })
50
+ }
51
+
52
+ if (!password) {
53
+ password = await prompts.password({ message: 'npm password:' }, {
54
+ input: process.stdin,
55
+ output: process.stderr
56
+ })
57
+ }
58
+
59
+ spinner.start()
60
+
61
+ const { uid, url } = await new RotateNpmConnect(hostname, token, org, username, password, email).run()
62
+
63
+ spinner.stop()
64
+
65
+ logger.success(`✔ connected [${url}]`)
66
+ logger.help(`⮕ next run [dotenvx-ops rotate dotenvx://${uid}]`)
67
+ } catch (error) {
68
+ spinner.stop()
69
+ if (error.message) {
70
+ logger.error(error.message)
71
+ } else {
72
+ logger.error(error)
73
+ }
74
+ if (error.help) {
75
+ logger.help(error.help)
76
+ }
77
+ if (error.stack) {
78
+ logger.debug(error.stack)
79
+ }
80
+ process.exit(1)
81
+ }
82
+ }
83
+
84
+ module.exports = connect
@@ -0,0 +1,84 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const prompts = require('../../../../lib/helpers/prompts')
3
+ const Session = require('./../../../../db/session')
4
+ const RotateOpenaiConnect = require('./../../../../lib/services/rotateOpenaiConnect')
5
+ const { createSpinner } = require('./../../../../lib/helpers/createSpinner')
6
+ const GetAccount = require('./../../../../lib/api/getAccount')
7
+
8
+ const spinner = createSpinner('waiting on browser completion')
9
+
10
+ async function connect () {
11
+ const options = this.opts()
12
+ logger.debug(`options: ${JSON.stringify(options)}`)
13
+
14
+ try {
15
+ const sesh = new Session()
16
+ const hostname = options.hostname || sesh.hostname()
17
+ const token = options.token || sesh.token()
18
+ let org = options.org
19
+ let username = options.username
20
+ let password = options.password
21
+ const email = options.email
22
+
23
+ // user must be logged in to use feature
24
+ const accountJson = await new GetAccount(hostname, token).run()
25
+
26
+ if (!org) {
27
+ const choices = accountJson.organizations.map(o => ({
28
+ name: o.provider_slug,
29
+ value: o.provider_slug
30
+ }))
31
+
32
+ if (choices.length === 1) {
33
+ org = choices[0].value // just use first choice
34
+ } else {
35
+ org = await prompts.select({
36
+ message: 'Select org',
37
+ choices
38
+ }, {
39
+ input: process.stdin,
40
+ output: process.stderr
41
+ })
42
+ }
43
+ }
44
+
45
+ if (!username) {
46
+ username = await prompts.input({ message: 'openai username:' }, {
47
+ input: process.stdin,
48
+ output: process.stderr
49
+ })
50
+ }
51
+
52
+ if (!password) {
53
+ password = await prompts.password({ message: 'openai password:' }, {
54
+ input: process.stdin,
55
+ output: process.stderr
56
+ })
57
+ }
58
+
59
+ spinner.start()
60
+
61
+ const { uid, url } = await new RotateOpenaiConnect(hostname, token, org, username, password, email).run()
62
+
63
+ spinner.stop()
64
+
65
+ logger.success(`✔ connected [${url}]`)
66
+ logger.help(`⮕ next run [dotenvx-ops rotate dotenvx://${uid}]`)
67
+ } catch (error) {
68
+ spinner.stop()
69
+ if (error.message) {
70
+ logger.error(error.message)
71
+ } else {
72
+ logger.error(error)
73
+ }
74
+ if (error.help) {
75
+ logger.help(error.help)
76
+ }
77
+ if (error.stack) {
78
+ logger.debug(error.stack)
79
+ }
80
+ process.exit(1)
81
+ }
82
+ }
83
+
84
+ module.exports = connect
@@ -0,0 +1,44 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const Session = require('./../../db/session')
3
+ const Rotate = require('./../../lib/services/rotate')
4
+ const createSpinner2 = require('./../../lib/helpers/createSpinner2')
5
+
6
+ async function rotate (uri) {
7
+ const options = this.opts()
8
+ const spinner = await createSpinner2({ ...options, text: 'rotating' })
9
+
10
+ logger.debug(`options: ${JSON.stringify(options)}`)
11
+ if (uri) {
12
+ logger.debug(`uri: ${uri}`)
13
+ }
14
+
15
+ try {
16
+ const sesh = new Session()
17
+ await sesh.notifyUpdate()
18
+ const hostname = options.hostname || sesh.hostname()
19
+ const token = options.token || sesh.token()
20
+
21
+ const { url, rotUid } = await new Rotate(hostname, token, uri).run()
22
+
23
+ if (spinner) spinner.stop()
24
+
25
+ logger.success(`⟳ rotated [${url}]`)
26
+ logger.help(`⮕ next run [dotenvx-ops get dotenvx://${rotUid}]`)
27
+ } catch (error) {
28
+ if (spinner) spinner.stop()
29
+ if (error.message) {
30
+ logger.error(error.message)
31
+ } else {
32
+ logger.error(error)
33
+ }
34
+ if (error.help) {
35
+ logger.help(error.help)
36
+ }
37
+ if (error.stack) {
38
+ logger.debug(error.stack)
39
+ }
40
+ process.exit(1)
41
+ }
42
+ }
43
+
44
+ module.exports = rotate
@@ -0,0 +1,34 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const Session = require('./../../db/session')
3
+
4
+ const main = require('./../../lib/main')
5
+
6
+ async function set (uri, value) {
7
+ // debug opts
8
+ const options = this.opts()
9
+ logger.debug(`options: ${JSON.stringify(options)}`)
10
+
11
+ const sesh = new Session()
12
+ const hostname = options.hostname || sesh.hostname()
13
+ const token = options.token
14
+
15
+ try {
16
+ await main.set(uri, value, { hostname, token })
17
+ logger.success(`✔ set [${uri}]`)
18
+ } catch (error) {
19
+ if (error.message) {
20
+ logger.error(error.message)
21
+ } else {
22
+ logger.error(error)
23
+ }
24
+ if (error.help) {
25
+ logger.help(error.help)
26
+ }
27
+ if (error.stack) {
28
+ logger.debug(error.stack)
29
+ }
30
+ process.exit(1)
31
+ }
32
+ }
33
+
34
+ module.exports = set
@@ -0,0 +1,24 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+
3
+ const Session = require('./../../../db/session')
4
+ const smartMask = require('./../../../lib/helpers/smartMask')
5
+
6
+ function device () {
7
+ const options = this.opts()
8
+
9
+ try {
10
+ const sesh = new Session()
11
+ const devicePublicKey = sesh.devicePublicKey()
12
+ if (devicePublicKey && devicePublicKey.length > 1) {
13
+ console.log(smartMask(devicePublicKey, options.unmask, 6))
14
+ } else {
15
+ logger.error('missing device. Try generating one with [dotenvx-ops login].')
16
+ process.exit(1)
17
+ }
18
+ } catch (error) {
19
+ logger.error(error.message)
20
+ process.exit(1)
21
+ }
22
+ }
23
+
24
+ module.exports = device
@@ -0,0 +1,20 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+ const Session = require('./../../../db/session')
3
+
4
+ function hostname () {
5
+ try {
6
+ const sesh = new Session()
7
+ const _hostname = sesh.hostname()
8
+ if (_hostname && _hostname.length > 1) {
9
+ console.log(_hostname)
10
+ } else {
11
+ logger.error('missing hostname. Try running [dotenvx-ops login].')
12
+ process.exit(1)
13
+ }
14
+ } catch (error) {
15
+ logger.error(error.message)
16
+ process.exit(1)
17
+ }
18
+ }
19
+
20
+ module.exports = hostname
@@ -0,0 +1,17 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+
3
+ const Session = require('./../../../db/session')
4
+
5
+ function off () {
6
+ try {
7
+ const sesh = new Session()
8
+ sesh.turnOff()
9
+ logger.success('✔ ops: off')
10
+ logger.help('⮕ check status with [dotenvx-ops status]')
11
+ } catch (error) {
12
+ logger.error(error.message)
13
+ process.exit(1)
14
+ }
15
+ }
16
+
17
+ module.exports = off
@@ -0,0 +1,17 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+
3
+ const Session = require('./../../../db/session')
4
+
5
+ function on () {
6
+ try {
7
+ const sesh = new Session()
8
+ sesh.turnOn()
9
+ logger.success('✔ ops: on')
10
+ logger.help('⮕ check status with [dotenvx-ops status]')
11
+ } catch (error) {
12
+ logger.error(error.message)
13
+ process.exit(1)
14
+ }
15
+ }
16
+
17
+ module.exports = on
@@ -0,0 +1,21 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+
3
+ const Session = require('./../../../db/session')
4
+
5
+ function path () {
6
+ try {
7
+ const sesh = new Session()
8
+ const path = sesh.path()
9
+ if (path && path.length > 1) {
10
+ console.log(path)
11
+ } else {
12
+ logger.error('missing path. Try generating one with [dotenvx-ops login].')
13
+ process.exit(1)
14
+ }
15
+ } catch (error) {
16
+ logger.error(error.message)
17
+ process.exit(1)
18
+ }
19
+ }
20
+
21
+ module.exports = path
@@ -0,0 +1,24 @@
1
+ const { logger } = require('@dotenvx/dotenvx')
2
+
3
+ const Session = require('./../../../db/session')
4
+ const smartMask = require('./../../../lib/helpers/smartMask')
5
+
6
+ function token () {
7
+ const options = this.opts()
8
+
9
+ try {
10
+ const sesh = new Session()
11
+ const token = sesh.token()
12
+ if (token && token.length > 1) {
13
+ console.log(smartMask(token, options.unmask, 10))
14
+ } else {
15
+ logger.error('missing token. Try generating one with [dotenvx-ops login].')
16
+ process.exit(1)
17
+ }
18
+ } catch (error) {
19
+ logger.error(error.message)
20
+ process.exit(1)
21
+ }
22
+ }
23
+
24
+ module.exports = token