@rockcarver/frodo-cli 0.16.1 → 0.16.2-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
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.16.2-1] - 2022-10-11
11
+
12
+ ## [0.16.2-0] - 2022-10-11
13
+
14
+ ### Added
15
+
16
+ - \#82: Check for updates
17
+
10
18
  ## [0.16.1] - 2022-10-11
11
19
 
12
20
  ### Changed
@@ -36,7 +44,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
36
44
 
37
45
  ### Fixed
38
46
 
39
- - rockcarver/frodo-lib#116: Frodo now properly imports themes.
47
+ - # rockcarver/frodo-lib#116: Frodo now properly imports themes.
48
+
49
+ ### Added
50
+
51
+ - \#82: Added version update checking
52
+ > > > > > > > Stashed changes
40
53
 
41
54
  ## [0.15.1] - 2022-10-05
42
55
 
@@ -649,7 +662,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
649
662
  - Fixed problem with adding connection profiles
650
663
  - Miscellaneous bug fixes
651
664
 
652
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.16.1...HEAD
665
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.16.2-1...HEAD
666
+
667
+ [0.16.2-1]: https://github.com/rockcarver/frodo-cli/compare/v0.16.2-0...v0.16.2-1
668
+
669
+ [0.16.2-0]: https://github.com/rockcarver/frodo-cli/compare/v0.16.1...v0.16.2-0
653
670
 
654
671
  [0.16.1]: https://github.com/rockcarver/frodo-cli/compare/v0.16.0...v0.16.1
655
672
 
package/esm/app.js CHANGED
@@ -1,9 +1,6 @@
1
1
  #!/usr/bin/env -S node --no-warnings --enable-source-maps --experimental-specifier-resolution=node
2
- import { getVersion, ConnectionProfile } from '@rockcarver/frodo-lib';
3
- import fs from 'fs';
4
- import { Command } from 'commander';
5
- import path from 'path';
6
- import { fileURLToPath } from 'url'; // commands
2
+ import { ConnectionProfile } from '@rockcarver/frodo-lib';
3
+ import { Command } from 'commander'; // commands
7
4
 
8
5
  import admin from './cli/admin/admin';
9
6
  import app from './cli/app/app';
@@ -19,17 +16,16 @@ import realm from './cli/realm/realm';
19
16
  import saml from './cli/saml/saml';
20
17
  import script from './cli/script/script';
21
18
  import theme from './cli/theme/theme';
22
-
23
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
24
-
25
- const pkg = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8'));
19
+ import { printMessage } from './utils/Console';
20
+ import { getVersions } from './utils/Version';
26
21
  const {
27
22
  initConnectionProfiles
28
23
  } = ConnectionProfile;
29
- const program = new Command('frodo').version(`cli: v${pkg.version}\nlib: ${getVersion()}\nnode: ${process.version}`, '-v, --version');
30
24
 
31
25
  (async () => {
32
26
  try {
27
+ const program = new Command('frodo').version(await getVersions(false), '-v, --version');
28
+ printMessage(await getVersions(true), 'text', false);
33
29
  initConnectionProfiles();
34
30
  program.addCommand(admin());
35
31
  program.addCommand(app());
@@ -49,7 +45,8 @@ const program = new Command('frodo').version(`cli: v${pkg.version}\nlib: ${getVe
49
45
  program.enablePositionalOptions();
50
46
  program.parse();
51
47
  } catch (e) {
52
- console.log(`ERROR: exception running frodo - ${e}`, 'error');
48
+ console.log(e);
49
+ printMessage(`ERROR: exception running frodo - ${e}`, 'error');
53
50
  }
54
51
  })();
55
52
  //# sourceMappingURL=app.js.map
package/esm/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","names":["getVersion","ConnectionProfile","fs","Command","path","fileURLToPath","admin","app","conn","email","esv","idm","idp","info","journey","logging","realm","saml","script","theme","__dirname","dirname","import","meta","url","pkg","JSON","parse","readFileSync","resolve","initConnectionProfiles","program","version","process","addCommand","showHelpAfterError","enablePositionalOptions","e","console","log"],"sources":["app.ts"],"sourcesContent":["#!/usr/bin/env -S node --no-warnings --enable-source-maps --experimental-specifier-resolution=node\n\nimport { getVersion, ConnectionProfile } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport { Command } from 'commander';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\n// commands\nimport admin from './cli/admin/admin';\nimport app from './cli/app/app';\nimport conn from './cli/conn/conn';\nimport email from './cli/email/email';\nimport esv from './cli/esv/esv';\nimport idm from './cli/idm/idm';\nimport idp from './cli/idp/idp';\nimport info from './cli/info/info';\nimport journey from './cli/journey/journey';\nimport logging from './cli/logging/logs';\nimport realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport theme from './cli/theme/theme';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8')\n);\n\nconst { initConnectionProfiles } = ConnectionProfile;\n\nconst program = new Command('frodo').version(\n `cli: v${pkg.version}\\nlib: ${getVersion()}\\nnode: ${process.version}`,\n '-v, --version'\n);\n\n(async () => {\n try {\n initConnectionProfiles();\n\n program.addCommand(admin());\n program.addCommand(app());\n program.addCommand(conn());\n program.addCommand(email());\n program.addCommand(esv());\n program.addCommand(idm());\n program.addCommand(idp());\n program.addCommand(info());\n program.addCommand(journey());\n program.addCommand(logging());\n program.addCommand(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(theme());\n\n program.showHelpAfterError();\n program.enablePositionalOptions();\n program.parse();\n } catch (e) {\n console.log(`ERROR: exception running frodo - ${e}`, 'error');\n }\n})();\n"],"mappings":"AAAA;AAEA,SAASA,UAAT,EAAqBC,iBAArB,QAA8C,uBAA9C;AACA,OAAOC,EAAP,MAAe,IAAf;AACA,SAASC,OAAT,QAAwB,WAAxB;AACA,OAAOC,IAAP,MAAiB,MAAjB;AACA,SAASC,aAAT,QAA8B,KAA9B,C,CAEA;;AACA,OAAOC,KAAP,MAAkB,mBAAlB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AACA,OAAOC,KAAP,MAAkB,mBAAlB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AACA,OAAOC,OAAP,MAAoB,uBAApB;AACA,OAAOC,OAAP,MAAoB,oBAApB;AACA,OAAOC,KAAP,MAAkB,mBAAlB;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AACA,OAAOC,MAAP,MAAmB,qBAAnB;AACA,OAAOC,KAAP,MAAkB,mBAAlB;;AAEA,MAAMC,SAAS,GAAGhB,IAAI,CAACiB,OAAL,CAAahB,aAAa,CAACiB,MAAM,CAACC,IAAP,CAAYC,GAAb,CAA1B,CAAlB;;AAEA,MAAMC,GAAG,GAAGC,IAAI,CAACC,KAAL,CACVzB,EAAE,CAAC0B,YAAH,CAAgBxB,IAAI,CAACyB,OAAL,CAAaT,SAAb,EAAwB,iBAAxB,CAAhB,EAA4D,MAA5D,CADU,CAAZ;AAIA,MAAM;EAAEU;AAAF,IAA6B7B,iBAAnC;AAEA,MAAM8B,OAAO,GAAG,IAAI5B,OAAJ,CAAY,OAAZ,EAAqB6B,OAArB,CACb,SAAQP,GAAG,CAACO,OAAQ,UAAShC,UAAU,EAAG,WAAUiC,OAAO,CAACD,OAAQ,EADvD,EAEd,eAFc,CAAhB;;AAKA,CAAC,YAAY;EACX,IAAI;IACFF,sBAAsB;IAEtBC,OAAO,CAACG,UAAR,CAAmB5B,KAAK,EAAxB;IACAyB,OAAO,CAACG,UAAR,CAAmB3B,GAAG,EAAtB;IACAwB,OAAO,CAACG,UAAR,CAAmB1B,IAAI,EAAvB;IACAuB,OAAO,CAACG,UAAR,CAAmBzB,KAAK,EAAxB;IACAsB,OAAO,CAACG,UAAR,CAAmBxB,GAAG,EAAtB;IACAqB,OAAO,CAACG,UAAR,CAAmBvB,GAAG,EAAtB;IACAoB,OAAO,CAACG,UAAR,CAAmBtB,GAAG,EAAtB;IACAmB,OAAO,CAACG,UAAR,CAAmBrB,IAAI,EAAvB;IACAkB,OAAO,CAACG,UAAR,CAAmBpB,OAAO,EAA1B;IACAiB,OAAO,CAACG,UAAR,CAAmBnB,OAAO,EAA1B;IACAgB,OAAO,CAACG,UAAR,CAAmBlB,KAAK,EAAxB;IACAe,OAAO,CAACG,UAAR,CAAmBjB,IAAI,EAAvB;IACAc,OAAO,CAACG,UAAR,CAAmBhB,MAAM,EAAzB;IACAa,OAAO,CAACG,UAAR,CAAmBf,KAAK,EAAxB;IAEAY,OAAO,CAACI,kBAAR;IACAJ,OAAO,CAACK,uBAAR;IACAL,OAAO,CAACJ,KAAR;EACD,CArBD,CAqBE,OAAOU,CAAP,EAAU;IACVC,OAAO,CAACC,GAAR,CAAa,oCAAmCF,CAAE,EAAlD,EAAqD,OAArD;EACD;AACF,CAzBD"}
1
+ {"version":3,"file":"app.js","names":["ConnectionProfile","Command","admin","app","conn","email","esv","idm","idp","info","journey","logging","realm","saml","script","theme","printMessage","getVersions","initConnectionProfiles","program","version","addCommand","showHelpAfterError","enablePositionalOptions","parse","e","console","log"],"sources":["app.ts"],"sourcesContent":["#!/usr/bin/env -S node --no-warnings --enable-source-maps --experimental-specifier-resolution=node\n\nimport { ConnectionProfile } from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\n\n// commands\nimport admin from './cli/admin/admin';\nimport app from './cli/app/app';\nimport conn from './cli/conn/conn';\nimport email from './cli/email/email';\nimport esv from './cli/esv/esv';\nimport idm from './cli/idm/idm';\nimport idp from './cli/idp/idp';\nimport info from './cli/info/info';\nimport journey from './cli/journey/journey';\nimport logging from './cli/logging/logs';\nimport realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport theme from './cli/theme/theme';\nimport { printMessage } from './utils/Console';\nimport { getVersions } from './utils/Version';\n\nconst { initConnectionProfiles } = ConnectionProfile;\n\n(async () => {\n try {\n const program = new Command('frodo').version(\n await getVersions(false),\n '-v, --version'\n );\n\n printMessage(await getVersions(true), 'text', false);\n\n initConnectionProfiles();\n\n program.addCommand(admin());\n program.addCommand(app());\n program.addCommand(conn());\n program.addCommand(email());\n program.addCommand(esv());\n program.addCommand(idm());\n program.addCommand(idp());\n program.addCommand(info());\n program.addCommand(journey());\n program.addCommand(logging());\n program.addCommand(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(theme());\n\n program.showHelpAfterError();\n program.enablePositionalOptions();\n program.parse();\n } catch (e) {\n console.log(e);\n printMessage(`ERROR: exception running frodo - ${e}`, 'error');\n }\n})();\n"],"mappings":"AAAA;AAEA,SAASA,iBAAT,QAAkC,uBAAlC;AACA,SAASC,OAAT,QAAwB,WAAxB,C,CAEA;;AACA,OAAOC,KAAP,MAAkB,mBAAlB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AACA,OAAOC,KAAP,MAAkB,mBAAlB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AACA,OAAOC,OAAP,MAAoB,uBAApB;AACA,OAAOC,OAAP,MAAoB,oBAApB;AACA,OAAOC,KAAP,MAAkB,mBAAlB;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AACA,OAAOC,MAAP,MAAmB,qBAAnB;AACA,OAAOC,KAAP,MAAkB,mBAAlB;AACA,SAASC,YAAT,QAA6B,iBAA7B;AACA,SAASC,WAAT,QAA4B,iBAA5B;AAEA,MAAM;EAAEC;AAAF,IAA6BlB,iBAAnC;;AAEA,CAAC,YAAY;EACX,IAAI;IACF,MAAMmB,OAAO,GAAG,IAAIlB,OAAJ,CAAY,OAAZ,EAAqBmB,OAArB,CACd,MAAMH,WAAW,CAAC,KAAD,CADH,EAEd,eAFc,CAAhB;IAKAD,YAAY,CAAC,MAAMC,WAAW,CAAC,IAAD,CAAlB,EAA0B,MAA1B,EAAkC,KAAlC,CAAZ;IAEAC,sBAAsB;IAEtBC,OAAO,CAACE,UAAR,CAAmBnB,KAAK,EAAxB;IACAiB,OAAO,CAACE,UAAR,CAAmBlB,GAAG,EAAtB;IACAgB,OAAO,CAACE,UAAR,CAAmBjB,IAAI,EAAvB;IACAe,OAAO,CAACE,UAAR,CAAmBhB,KAAK,EAAxB;IACAc,OAAO,CAACE,UAAR,CAAmBf,GAAG,EAAtB;IACAa,OAAO,CAACE,UAAR,CAAmBd,GAAG,EAAtB;IACAY,OAAO,CAACE,UAAR,CAAmBb,GAAG,EAAtB;IACAW,OAAO,CAACE,UAAR,CAAmBZ,IAAI,EAAvB;IACAU,OAAO,CAACE,UAAR,CAAmBX,OAAO,EAA1B;IACAS,OAAO,CAACE,UAAR,CAAmBV,OAAO,EAA1B;IACAQ,OAAO,CAACE,UAAR,CAAmBT,KAAK,EAAxB;IACAO,OAAO,CAACE,UAAR,CAAmBR,IAAI,EAAvB;IACAM,OAAO,CAACE,UAAR,CAAmBP,MAAM,EAAzB;IACAK,OAAO,CAACE,UAAR,CAAmBN,KAAK,EAAxB;IAEAI,OAAO,CAACG,kBAAR;IACAH,OAAO,CAACI,uBAAR;IACAJ,OAAO,CAACK,KAAR;EACD,CA5BD,CA4BE,OAAOC,CAAP,EAAU;IACVC,OAAO,CAACC,GAAR,CAAYF,CAAZ;IACAT,YAAY,CAAE,oCAAmCS,CAAE,EAAvC,EAA0C,OAA1C,CAAZ;EACD;AACF,CAjCD"}
@@ -0,0 +1,153 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { fileURLToPath } from 'url';
5
+ import { compareVersions } from 'compare-versions';
6
+ import Color from 'colors';
7
+ import { LibVersion } from '@rockcarver/frodo-lib';
8
+ const VERSION_CACHE_FILE = `${os.homedir()}/.frodo/Versions.json`;
9
+ const VERSION_CHECK_INTERVAL = 3600;
10
+ const GITHUB_REPOS_URL = `https://api.github.com`;
11
+ const GITHUB_RELEASES_PATH_CLI = `/repos/rockcarver/frodo-cli/releases`;
12
+ const NPM_BASE_URL = `https://registry.npmjs.org`;
13
+ const NPM_PACKAGE_PATH_CLI = `/@rockcarver/frodo-cli`;
14
+ const ENDPOINTS = [{
15
+ base: GITHUB_REPOS_URL,
16
+ path: GITHUB_RELEASES_PATH_CLI
17
+ }, {
18
+ base: NPM_BASE_URL,
19
+ path: NPM_PACKAGE_PATH_CLI
20
+ }];
21
+ let versionObject = {
22
+ last_checked: 0,
23
+ github: '',
24
+ npm: ''
25
+ };
26
+
27
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
28
+
29
+ Color.enable();
30
+ const pkg = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../package.json'), 'utf8'));
31
+
32
+ function getCliVersion() {
33
+ return `${pkg.version}`;
34
+ }
35
+
36
+ function getLibVersion() {
37
+ return LibVersion.getVersion();
38
+ }
39
+
40
+ function extractGithubReleaseInfo(data) {
41
+ const release = {
42
+ type: 'github',
43
+ name: '',
44
+ published_at: ''
45
+ }; // find first stable release
46
+
47
+ const r = data.find(rel => rel.prerelease == false);
48
+ release.name = r.name;
49
+ release.published_at = r.published_at;
50
+ return release;
51
+ }
52
+
53
+ function extractNpmReleaseInfo(data) {
54
+ const release = {
55
+ type: 'npm',
56
+ name: '',
57
+ published_at: ''
58
+ }; // stable release
59
+
60
+ release.name = data[`dist-tags`].latest;
61
+ release.published_at = data.time[data[`dist-tags`].latest];
62
+ return release;
63
+ }
64
+
65
+ async function getRemoteVersionData() {
66
+ let useCache = true;
67
+
68
+ if (fs.existsSync(VERSION_CACHE_FILE)) {
69
+ const data = fs.readFileSync(VERSION_CACHE_FILE, 'utf8');
70
+ versionObject = JSON.parse(data);
71
+
72
+ if (versionObject.last_checked + VERSION_CHECK_INTERVAL < Math.floor(Date.now() / 1000)) {
73
+ useCache = false;
74
+ }
75
+ } else {
76
+ useCache = false;
77
+ }
78
+
79
+ if (!useCache) {
80
+ let allVersions = [];
81
+ const result = await LibVersion.getAllVersions(ENDPOINTS);
82
+ result.forEach(item => {
83
+ if (Array.isArray(item['value'].data)) {
84
+ allVersions.push(extractGithubReleaseInfo(item['value'].data));
85
+ } else {
86
+ allVersions.push(extractNpmReleaseInfo(item['value'].data));
87
+ }
88
+ }); // const allVersions = await LibVersion.getAllVersions(ENDPOINTS);
89
+
90
+ allVersions.forEach(element => {
91
+ // cli
92
+ if (element.type == 'github') {
93
+ versionObject.github = element.name;
94
+ } else {
95
+ versionObject.npm = element.name;
96
+ }
97
+ });
98
+ versionObject.last_checked = Math.floor(Date.now() / 1000);
99
+ fs.writeFileSync(VERSION_CACHE_FILE, JSON.stringify(versionObject, null, 2));
100
+ }
101
+ }
102
+
103
+ function getBinaryName() {
104
+ return path.basename(process.execPath);
105
+ }
106
+
107
+ export async function getVersions(checkOnly) {
108
+ let updateAvailable = false;
109
+ let usingBinary = false;
110
+
111
+ if (getBinaryName() == 'frodo') {
112
+ usingBinary = true;
113
+ }
114
+
115
+ try {
116
+ await getRemoteVersionData();
117
+ } catch (e) {
118
+ // Do not report error if remote version can not be obtained.
119
+ // Just silently report installed version
120
+ versionObject = {
121
+ last_checked: 0,
122
+ github: null,
123
+ npm: null
124
+ };
125
+ }
126
+
127
+ let versionString = `You seem to be running the ${usingBinary ? 'binary' : 'NPM'} package`;
128
+ versionString += `\nInstalled versions:`;
129
+ versionString += `\ncli: v${getCliVersion()}\nlib: v${getLibVersion()}\nnode: ${process.version}`;
130
+ let newVersionString = '';
131
+
132
+ if (usingBinary && versionObject.github != null && compareVersions(getCliVersion(), versionObject.github) == -1 || !usingBinary && versionObject.npm != null && compareVersions(getCliVersion(), versionObject.npm) == -1) {
133
+ updateAvailable = true;
134
+ newVersionString += `\n\nNewer version(s) available`;
135
+
136
+ if (usingBinary) {
137
+ newVersionString += compareVersions(getCliVersion(), versionObject.github) == -1 ? `\ncli (github): v${versionObject.github}`.green : ``;
138
+ } else {
139
+ newVersionString += compareVersions(getCliVersion(), versionObject.npm) == -1 ? `\ncli (npm): v${versionObject.npm}`.green : ``;
140
+ }
141
+ }
142
+
143
+ if (checkOnly) {
144
+ if (updateAvailable) {
145
+ return `A new version of frodo is available.\nPlease run 'frodo -v' for more details.\n`.green;
146
+ } else {
147
+ return ``;
148
+ }
149
+ } else {
150
+ return versionString + newVersionString;
151
+ }
152
+ }
153
+ //# sourceMappingURL=Version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Version.js","names":["fs","path","os","fileURLToPath","compareVersions","Color","LibVersion","VERSION_CACHE_FILE","homedir","VERSION_CHECK_INTERVAL","GITHUB_REPOS_URL","GITHUB_RELEASES_PATH_CLI","NPM_BASE_URL","NPM_PACKAGE_PATH_CLI","ENDPOINTS","base","versionObject","last_checked","github","npm","__dirname","dirname","import","meta","url","enable","pkg","JSON","parse","readFileSync","resolve","getCliVersion","version","getLibVersion","getVersion","extractGithubReleaseInfo","data","release","type","name","published_at","r","find","rel","prerelease","extractNpmReleaseInfo","latest","time","getRemoteVersionData","useCache","existsSync","Math","floor","Date","now","allVersions","result","getAllVersions","forEach","item","Array","isArray","push","element","writeFileSync","stringify","getBinaryName","basename","process","execPath","getVersions","checkOnly","updateAvailable","usingBinary","e","versionString","newVersionString","green"],"sources":["utils/Version.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport { fileURLToPath } from 'url';\nimport { compareVersions } from 'compare-versions';\n\nimport Color from 'colors';\n\nimport { LibVersion } from '@rockcarver/frodo-lib';\n\nconst VERSION_CACHE_FILE = `${os.homedir()}/.frodo/Versions.json`;\nconst VERSION_CHECK_INTERVAL = 3600;\n\nconst GITHUB_REPOS_URL = `https://api.github.com`;\nconst GITHUB_RELEASES_PATH_CLI = `/repos/rockcarver/frodo-cli/releases`;\n\nconst NPM_BASE_URL = `https://registry.npmjs.org`;\nconst NPM_PACKAGE_PATH_CLI = `/@rockcarver/frodo-cli`;\n\nconst ENDPOINTS = [\n {\n base: GITHUB_REPOS_URL,\n path: GITHUB_RELEASES_PATH_CLI,\n },\n {\n base: NPM_BASE_URL,\n path: NPM_PACKAGE_PATH_CLI,\n },\n];\n\nlet versionObject = {\n last_checked: 0,\n github: '',\n npm: '',\n};\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nColor.enable();\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../../package.json'), 'utf8')\n);\n\nfunction getCliVersion() {\n return `${pkg.version}`;\n}\n\nfunction getLibVersion() {\n return LibVersion.getVersion();\n}\n\nfunction extractGithubReleaseInfo(data) {\n const release = {\n type: 'github',\n name: '',\n published_at: '',\n };\n // find first stable release\n const r = data.find((rel) => rel.prerelease == false);\n release.name = r.name;\n release.published_at = r.published_at;\n return release;\n}\n\nfunction extractNpmReleaseInfo(data) {\n const release = {\n type: 'npm',\n name: '',\n published_at: '',\n };\n // stable release\n release.name = data[`dist-tags`].latest;\n release.published_at = data.time[data[`dist-tags`].latest];\n return release;\n}\n\nasync function getRemoteVersionData() {\n let useCache = true;\n if (fs.existsSync(VERSION_CACHE_FILE)) {\n const data = fs.readFileSync(VERSION_CACHE_FILE, 'utf8');\n versionObject = JSON.parse(data);\n if (\n versionObject.last_checked + VERSION_CHECK_INTERVAL <\n Math.floor(Date.now() / 1000)\n ) {\n useCache = false;\n }\n } else {\n useCache = false;\n }\n\n if (!useCache) {\n let allVersions = [];\n const result = await LibVersion.getAllVersions(ENDPOINTS);\n result.forEach((item) => {\n if (Array.isArray(item['value'].data)) {\n allVersions.push(extractGithubReleaseInfo(item['value'].data));\n } else {\n allVersions.push(extractNpmReleaseInfo(item['value'].data));\n }\n });\n // const allVersions = await LibVersion.getAllVersions(ENDPOINTS);\n allVersions.forEach((element) => {\n // cli\n if (element.type == 'github') {\n versionObject.github = element.name;\n } else {\n versionObject.npm = element.name;\n }\n });\n versionObject.last_checked = Math.floor(Date.now() / 1000);\n fs.writeFileSync(\n VERSION_CACHE_FILE,\n JSON.stringify(versionObject, null, 2)\n );\n }\n}\n\nfunction getBinaryName() {\n return path.basename(process.execPath);\n}\n\nexport async function getVersions(checkOnly: boolean) {\n let updateAvailable = false;\n let usingBinary = false;\n if (getBinaryName() == 'frodo') {\n usingBinary = true;\n }\n try {\n await getRemoteVersionData();\n } catch (e) {\n // Do not report error if remote version can not be obtained.\n // Just silently report installed version\n versionObject = {\n last_checked: 0,\n github: null,\n npm: null,\n };\n }\n\n let versionString = `You seem to be running the ${\n usingBinary ? 'binary' : 'NPM'\n } package`;\n\n versionString += `\\nInstalled versions:`;\n versionString += `\\ncli: v${getCliVersion()}\\nlib: v${getLibVersion()}\\nnode: ${\n process.version\n }`;\n let newVersionString = '';\n if (\n (usingBinary && versionObject.github != null && \n compareVersions(getCliVersion(), versionObject.github) == -1) ||\n (!usingBinary && versionObject.npm != null && compareVersions(getCliVersion(), versionObject.npm) == -1)\n ) {\n updateAvailable = true;\n newVersionString += `\\n\\nNewer version(s) available`;\n if (usingBinary) {\n newVersionString +=\n compareVersions(getCliVersion(), versionObject.github) == -1\n ? `\\ncli (github): v${versionObject.github}`.green\n : ``;\n } else {\n newVersionString +=\n compareVersions(getCliVersion(), versionObject.npm) == -1\n ? `\\ncli (npm): v${versionObject.npm}`.green\n : ``;\n }\n }\n if (checkOnly) {\n if (updateAvailable) {\n return `A new version of frodo is available.\\nPlease run 'frodo -v' for more details.\\n`\n .green;\n } else {\n return ``;\n }\n } else {\n return versionString + newVersionString;\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-cli",
3
- "version": "0.16.1",
3
+ "version": "0.16.2-1",
4
4
  "type": "module",
5
5
  "description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
6
6
  "keywords": [
@@ -88,11 +88,12 @@
88
88
  ]
89
89
  },
90
90
  "dependencies": {
91
- "@rockcarver/frodo-lib": "0.14.1",
91
+ "@rockcarver/frodo-lib": "0.14.2-0",
92
92
  "cli-progress": "^3.11.2",
93
93
  "cli-table3": "^0.6.2",
94
94
  "colors": "^1.4.0",
95
95
  "commander": "^9.4.0",
96
+ "compare-versions": "^5.0.1",
96
97
  "nanospinner": "^1.1.0",
97
98
  "uuid": "^8.3.2",
98
99
  "yesno": "^0.4.0"