@rockcarver/frodo-lib 0.16.2-10 → 0.16.2-11

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 (54) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/cjs/api/BaseApi.js +6 -1
  3. package/cjs/api/BaseApi.js.map +1 -1
  4. package/cjs/index.js +1 -5
  5. package/cjs/index.js.map +1 -1
  6. package/cjs/ops/ConnectionProfileOps.js +19 -2
  7. package/cjs/ops/ConnectionProfileOps.js.map +1 -1
  8. package/cjs/ops/EmailTemplateOps.js +35 -311
  9. package/cjs/ops/EmailTemplateOps.js.map +1 -1
  10. package/cjs/ops/EmailTemplateOps.test.js.map +1 -1
  11. package/cjs/ops/JourneyOps.js +7 -7
  12. package/cjs/ops/JourneyOps.js.map +1 -1
  13. package/cjs/ops/ThemeOps.js +231 -348
  14. package/cjs/ops/ThemeOps.js.map +1 -1
  15. package/cjs/ops/ThemeOps.test.js.map +1 -0
  16. package/cjs/ops/utils/ExportImportUtils.js +1 -0
  17. package/cjs/ops/utils/ExportImportUtils.js.map +1 -1
  18. package/cjs/test/mocks/snapshotResolve.js +0 -2
  19. package/cjs/test/mocks/snapshotResolve.js.map +1 -1
  20. package/esm/api/BaseApi.mjs +5 -0
  21. package/esm/index.mjs +0 -2
  22. package/esm/ops/ConnectionProfileOps.mjs +19 -2
  23. package/esm/ops/EmailTemplateOps.mjs +18 -250
  24. package/esm/ops/EmailTemplateOps.test.mjs +14 -39
  25. package/esm/ops/JourneyOps.mjs +2 -2
  26. package/esm/ops/ThemeOps.mjs +180 -254
  27. package/esm/{api/ThemeApi.test.mjs → ops/ThemeOps.test.mjs} +48 -48
  28. package/esm/ops/utils/ExportImportUtils.mjs +1 -1
  29. package/esm/test/mocks/snapshotResolve.mjs +0 -2
  30. package/package.json +1 -1
  31. package/types/api/BaseApi.d.ts.map +1 -1
  32. package/types/index.d.ts +0 -2
  33. package/types/index.d.ts.map +1 -1
  34. package/types/ops/ConnectionProfileOps.d.ts.map +1 -1
  35. package/types/ops/EmailTemplateOps.d.ts +14 -33
  36. package/types/ops/EmailTemplateOps.d.ts.map +1 -1
  37. package/types/ops/JourneyOps.d.ts.map +1 -1
  38. package/types/ops/ThemeOps.d.ts +35 -50
  39. package/types/ops/ThemeOps.d.ts.map +1 -1
  40. package/types/ops/utils/ExportImportUtils.d.ts +2 -0
  41. package/types/ops/utils/ExportImportUtils.d.ts.map +1 -1
  42. package/types/test/mocks/snapshotResolve.d.ts +1 -1
  43. package/types/test/mocks/snapshotResolve.d.ts.map +1 -1
  44. package/cjs/api/EmailTemplateApi.js +0 -61
  45. package/cjs/api/EmailTemplateApi.js.map +0 -1
  46. package/cjs/api/ThemeApi.js +0 -305
  47. package/cjs/api/ThemeApi.js.map +0 -1
  48. package/cjs/api/ThemeApi.test.js.map +0 -1
  49. package/esm/api/EmailTemplateApi.mjs +0 -34
  50. package/esm/api/ThemeApi.mjs +0 -241
  51. package/types/api/EmailTemplateApi.d.ts +0 -22
  52. package/types/api/EmailTemplateApi.d.ts.map +0 -1
  53. package/types/api/ThemeApi.d.ts +0 -56
  54. package/types/api/ThemeApi.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ 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-11] - 2022-11-22
11
+
12
+ - \#154: Add frodo specific transactionId to all API requests
13
+ - rockcarver/frodo-cli#110: Migrate from .frodorc to Connections.json
14
+ - Refactored Email Template and Theme functionality in lib to remove fs operations
15
+
10
16
  ## [0.16.2-10] - 2022-11-22
11
17
 
12
18
  ## [0.16.2-9] - 2022-11-21
@@ -702,7 +708,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
702
708
  - Fixed problem with adding connection profiles
703
709
  - Miscellaneous bug fixes
704
710
 
705
- [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.16.2-10...HEAD
711
+ [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.16.2-11...HEAD
712
+
713
+ [0.16.2-11]: https://github.com/rockcarver/frodo-lib/compare/v0.16.2-10...v0.16.2-11
706
714
 
707
715
  [0.16.2-10]: https://github.com/rockcarver/frodo-lib/compare/v0.16.2-9...v0.16.2-10
708
716
 
@@ -20,6 +20,7 @@ var _SessionStorage = _interopRequireDefault(require("../storage/SessionStorage"
20
20
  var _path = _interopRequireDefault(require("path"));
21
21
  var _Console = require("../ops/utils/Console");
22
22
  var _curlirize2 = _interopRequireDefault(require("../ext/axios-curlirize/curlirize"));
23
+ var _crypto = require("crypto");
23
24
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24
25
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -43,6 +44,7 @@ var maxSockets = 100;
43
44
  var maxFreeSockets = 10;
44
45
  var freeSocketTimeout = 30000;
45
46
  var userAgent = "".concat(pkg.name, "/").concat(pkg.version);
47
+ var transactionId = "frodo-".concat((0, _crypto.randomUUID)());
46
48
  var httpAgent, httpsAgent;
47
49
  function getHttpAgent() {
48
50
  if (httpAgent) return httpAgent;
@@ -123,6 +125,7 @@ function generateAmApi(resource) {
123
125
  var requestOverride = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
124
126
  var headers = _objectSpread(_objectSpread({
125
127
  'User-Agent': userAgent,
128
+ 'X-ForgeRock-TransactionId': transactionId,
126
129
  'Content-Type': 'application/json'
127
130
  }, resource.apiVersion && {
128
131
  'Accept-API-Version': resource.apiVersion
@@ -161,7 +164,8 @@ function generateAmApi(resource) {
161
164
  function generateOauth2Api(resource) {
162
165
  var requestOverride = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
163
166
  var headers = _objectSpread(_objectSpread({
164
- 'User-Agent': userAgent
167
+ 'User-Agent': userAgent,
168
+ 'X-ForgeRock-TransactionId': transactionId
165
169
  }, resource.apiVersion && {
166
170
  'Accept-API-Version': resource.apiVersion
167
171
  }), _SessionStorage.default.session.getCookieName() && _SessionStorage.default.session.getCookieValue() && {
@@ -202,6 +206,7 @@ function generateIdmApi() {
202
206
  timeout,
203
207
  headers: {
204
208
  'User-Agent': userAgent,
209
+ 'X-ForgeRock-TransactionId': transactionId,
205
210
  'Content-Type': 'application/json'
206
211
  }
207
212
  }, requestOverride), {}, {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseApi.js","names":["__dirname","path","dirname","fileURLToPath","pkg","JSON","parse","fs","readFileSync","resolve","axiosRetry","axios","retries","shouldResetTimeout","retryCondition","_error","timeout","maxSockets","maxFreeSockets","freeSocketTimeout","userAgent","name","version","httpAgent","httpsAgent","getHttpAgent","Agent","getHttpsAgent","options","rejectUnauthorized","storage","session","getAllowInsecureConnection","httpsProxy","process","env","HTTPS_PROXY","https_proxy","console","error","parsed","url","hostname","port","protocol","HttpsProxyAgent","HttpsAgent","getProxy","curlirize","request","_curlirize","result","err","command","printMessage","curlirizeMessage","generateAmApi","resource","requestOverride","headers","apiVersion","getCookieName","getCookieValue","Cookie","requestDetails","getAuthenticationHeaderOverrides","proxy","create","getCurlirize","generateOauth2Api","generateIdmApi","getBearerToken","generateLogKeysApi","generateLogApi","getLogApiKey","getLogApiSecret","generateESVApi","generateReleaseApi","baseUrl","baseURL"],"sources":["api/BaseApi.ts"],"sourcesContent":["import Agent from 'agentkeepalive';\nimport axios, { AxiosProxyConfig } from 'axios';\nimport axiosRetry from 'axios-retry';\nimport HttpsProxyAgent from 'https-proxy-agent';\nimport url from 'url';\nimport fs from 'fs';\nimport storage from '../storage/SessionStorage';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { curlirizeMessage, printMessage } from '../ops/utils/Console';\nimport _curlirize from '../ext/axios-curlirize/curlirize';\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\naxiosRetry(axios, {\n retries: 3,\n shouldResetTimeout: true,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n retryCondition: (_error) => true, // retry no matter what\n});\n\n// all agents\nconst timeout = 30000;\n\n// agentkeepalive\nconst maxSockets = 100;\nconst maxFreeSockets = 10;\nconst freeSocketTimeout = 30000;\n\nconst userAgent = `${pkg.name}/${pkg.version}`;\nlet httpAgent, httpsAgent;\n\nfunction getHttpAgent() {\n if (httpAgent) return httpAgent;\n httpAgent = new Agent({\n maxSockets,\n maxFreeSockets,\n timeout,\n freeSocketTimeout,\n });\n return httpAgent;\n}\n\n/**\n * Helper method to create properly configured httpsAgent\n * @returns {any} appropriate httpsAgent\n */\nfunction getHttpsAgent() {\n if (httpsAgent) return httpsAgent;\n const options = {\n rejectUnauthorized: !storage.session.getAllowInsecureConnection(),\n };\n const httpsProxy = process.env.HTTPS_PROXY || process.env.https_proxy;\n if (httpsProxy) {\n // https://github.com/axios/axios/issues/3459\n console.error(`Using proxy ${httpsProxy}`['yellow']);\n const parsed = url.parse(httpsProxy);\n options['host'] = parsed.hostname;\n options['port'] = parsed.port;\n options['protocol'] = parsed.protocol;\n options.rejectUnauthorized = !storage.session.getAllowInsecureConnection();\n httpsAgent = HttpsProxyAgent(options);\n return httpsAgent;\n }\n httpsAgent = new Agent.HttpsAgent({\n ...options,\n maxSockets,\n maxFreeSockets,\n timeout,\n freeSocketTimeout,\n });\n return httpsAgent;\n}\n\n/**\n * Get Proxy config\n * @returns {AxiosProxyConfig | false} axios proxy config or false\n */\nfunction getProxy(): AxiosProxyConfig | false {\n if (process.env.HTTPS_PROXY || process.env.https_proxy) return false;\n return null;\n}\n\n/**\n * Customize curlirize output\n * @param request axios request object\n */\nfunction curlirize(request) {\n _curlirize(request, (result, err) => {\n const { command } = result;\n if (err) {\n printMessage(err, 'error');\n } else {\n curlirizeMessage(command);\n }\n });\n}\n\n/**\n * Generates an AM Axios API instance\n * @param {object} resource Takes an object takes a resource object. example:\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either\n * add on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateAmApi(resource, requestOverride = {}) {\n let headers = {\n 'User-Agent': userAgent,\n 'Content-Type': 'application/json',\n // only add API version if we have it\n ...(resource.apiVersion && { 'Accept-API-Version': resource.apiVersion }),\n // only send session cookie if we know its name and value\n ...(storage.session.getCookieName() &&\n storage.session.getCookieValue() && {\n Cookie: `${storage.session.getCookieName()}=${storage.session.getCookieValue()}`,\n }),\n };\n if (requestOverride['headers']) {\n headers = {\n ...headers,\n ...requestOverride['headers'],\n };\n }\n\n const requestDetails = {\n // baseURL: `${storage.session.getTenant()}/json`,\n timeout,\n ...requestOverride,\n headers: {\n ...headers,\n ...storage.session.getAuthenticationHeaderOverrides(),\n },\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates an OAuth2 Axios API instance\n * @param {object} resource Takes an object takes a resource object. example:\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either\n * add on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateOauth2Api(resource, requestOverride = {}) {\n let headers = {\n 'User-Agent': userAgent,\n // only add API version if we have it\n ...(resource.apiVersion && { 'Accept-API-Version': resource.apiVersion }),\n // only send session cookie if we know its name and value\n ...(storage.session.getCookieName() &&\n storage.session.getCookieValue() && {\n Cookie: `${storage.session.getCookieName()}=${storage.session.getCookieValue()}`,\n }),\n };\n if (requestOverride['headers']) {\n headers = {\n ...headers,\n ...requestOverride['headers'],\n };\n }\n\n const requestDetails = {\n // baseURL: `${storage.session.getTenant()}/json${resource.path}`,\n timeout,\n ...requestOverride,\n headers: {\n ...headers,\n ...storage.session.getAuthenticationHeaderOverrides(),\n },\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates an IDM Axios API instance\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateIdmApi(requestOverride = {}) {\n const requestDetails = {\n // baseURL: getTenantURL(storage.session.getTenant()),\n timeout,\n headers: {\n 'User-Agent': userAgent,\n 'Content-Type': 'application/json',\n },\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n if (storage.session.getBearerToken()) {\n requestDetails.headers[\n 'Authorization'\n ] = `Bearer ${storage.session.getBearerToken()}`;\n }\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates a LogKeys API Axios instance\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateLogKeysApi(requestOverride = {}) {\n const headers = {\n 'User-Agent': userAgent,\n 'Content-Type': 'application/json',\n };\n const requestDetails = {\n // baseURL: getTenantURL(storage.session.getTenant()),\n timeout,\n headers,\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n if (storage.session.getBearerToken()) {\n requestDetails.headers[\n 'Authorization'\n ] = `Bearer ${storage.session.getBearerToken()}`;\n }\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates a Log API Axios instance\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateLogApi(requestOverride = {}) {\n const headers = {\n 'User-Agent': userAgent,\n 'X-API-Key': storage.session.getLogApiKey(),\n 'X-API-Secret': storage.session.getLogApiSecret(),\n };\n const requestDetails = {\n // baseURL: getTenantURL(storage.session.getTenant()),\n timeout,\n headers,\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates an ESV Axios API instance for Environment Secrets and Variables\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateESVApi(resource, requestOverride = {}) {\n const headers = {\n 'User-Agent': userAgent,\n 'Content-Type': 'application/json',\n // only add API version if we have it\n ...(resource.apiVersion && { 'Accept-API-Version': resource.apiVersion }),\n };\n const requestDetails = {\n // baseURL: getTenantURL(storage.session.getTenant()),\n timeout,\n headers,\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n if (storage.session.getBearerToken()) {\n requestDetails.headers[\n 'Authorization'\n ] = `Bearer ${storage.session.getBearerToken()}`;\n }\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates a release (Github or Npm) Axios API instance\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateReleaseApi(baseUrl, requestOverride = {}) {\n const requestDetails = {\n baseURL: baseUrl,\n timeout,\n headers: {\n 'User-Agent': userAgent,\n 'Content-Type': 'application/json',\n },\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BaseApi.js","names":["__dirname","path","dirname","fileURLToPath","pkg","JSON","parse","fs","readFileSync","resolve","axiosRetry","axios","retries","shouldResetTimeout","retryCondition","_error","timeout","maxSockets","maxFreeSockets","freeSocketTimeout","userAgent","name","version","transactionId","randomUUID","httpAgent","httpsAgent","getHttpAgent","Agent","getHttpsAgent","options","rejectUnauthorized","storage","session","getAllowInsecureConnection","httpsProxy","process","env","HTTPS_PROXY","https_proxy","console","error","parsed","url","hostname","port","protocol","HttpsProxyAgent","HttpsAgent","getProxy","curlirize","request","_curlirize","result","err","command","printMessage","curlirizeMessage","generateAmApi","resource","requestOverride","headers","apiVersion","getCookieName","getCookieValue","Cookie","requestDetails","getAuthenticationHeaderOverrides","proxy","create","getCurlirize","generateOauth2Api","generateIdmApi","getBearerToken","generateLogKeysApi","generateLogApi","getLogApiKey","getLogApiSecret","generateESVApi","generateReleaseApi","baseUrl","baseURL"],"sources":["api/BaseApi.ts"],"sourcesContent":["import Agent from 'agentkeepalive';\nimport axios, { AxiosProxyConfig } from 'axios';\nimport axiosRetry from 'axios-retry';\nimport HttpsProxyAgent from 'https-proxy-agent';\nimport url from 'url';\nimport fs from 'fs';\nimport storage from '../storage/SessionStorage';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { curlirizeMessage, printMessage } from '../ops/utils/Console';\nimport _curlirize from '../ext/axios-curlirize/curlirize';\nimport { randomUUID } from 'crypto';\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\naxiosRetry(axios, {\n retries: 3,\n shouldResetTimeout: true,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n retryCondition: (_error) => true, // retry no matter what\n});\n\n// all agents\nconst timeout = 30000;\n\n// agentkeepalive\nconst maxSockets = 100;\nconst maxFreeSockets = 10;\nconst freeSocketTimeout = 30000;\n\nconst userAgent = `${pkg.name}/${pkg.version}`;\nconst transactionId = `frodo-${randomUUID()}`;\nlet httpAgent, httpsAgent;\n\nfunction getHttpAgent() {\n if (httpAgent) return httpAgent;\n httpAgent = new Agent({\n maxSockets,\n maxFreeSockets,\n timeout,\n freeSocketTimeout,\n });\n return httpAgent;\n}\n\n/**\n * Helper method to create properly configured httpsAgent\n * @returns {any} appropriate httpsAgent\n */\nfunction getHttpsAgent() {\n if (httpsAgent) return httpsAgent;\n const options = {\n rejectUnauthorized: !storage.session.getAllowInsecureConnection(),\n };\n const httpsProxy = process.env.HTTPS_PROXY || process.env.https_proxy;\n if (httpsProxy) {\n // https://github.com/axios/axios/issues/3459\n console.error(`Using proxy ${httpsProxy}`['yellow']);\n const parsed = url.parse(httpsProxy);\n options['host'] = parsed.hostname;\n options['port'] = parsed.port;\n options['protocol'] = parsed.protocol;\n options.rejectUnauthorized = !storage.session.getAllowInsecureConnection();\n httpsAgent = HttpsProxyAgent(options);\n return httpsAgent;\n }\n httpsAgent = new Agent.HttpsAgent({\n ...options,\n maxSockets,\n maxFreeSockets,\n timeout,\n freeSocketTimeout,\n });\n return httpsAgent;\n}\n\n/**\n * Get Proxy config\n * @returns {AxiosProxyConfig | false} axios proxy config or false\n */\nfunction getProxy(): AxiosProxyConfig | false {\n if (process.env.HTTPS_PROXY || process.env.https_proxy) return false;\n return null;\n}\n\n/**\n * Customize curlirize output\n * @param request axios request object\n */\nfunction curlirize(request) {\n _curlirize(request, (result, err) => {\n const { command } = result;\n if (err) {\n printMessage(err, 'error');\n } else {\n curlirizeMessage(command);\n }\n });\n}\n\n/**\n * Generates an AM Axios API instance\n * @param {object} resource Takes an object takes a resource object. example:\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either\n * add on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateAmApi(resource, requestOverride = {}) {\n let headers = {\n 'User-Agent': userAgent,\n 'X-ForgeRock-TransactionId': transactionId,\n 'Content-Type': 'application/json',\n // only add API version if we have it\n ...(resource.apiVersion && { 'Accept-API-Version': resource.apiVersion }),\n // only send session cookie if we know its name and value\n ...(storage.session.getCookieName() &&\n storage.session.getCookieValue() && {\n Cookie: `${storage.session.getCookieName()}=${storage.session.getCookieValue()}`,\n }),\n };\n if (requestOverride['headers']) {\n headers = {\n ...headers,\n ...requestOverride['headers'],\n };\n }\n\n const requestDetails = {\n // baseURL: `${storage.session.getTenant()}/json`,\n timeout,\n ...requestOverride,\n headers: {\n ...headers,\n ...storage.session.getAuthenticationHeaderOverrides(),\n },\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates an OAuth2 Axios API instance\n * @param {object} resource Takes an object takes a resource object. example:\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either\n * add on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateOauth2Api(resource, requestOverride = {}) {\n let headers = {\n 'User-Agent': userAgent,\n 'X-ForgeRock-TransactionId': transactionId,\n // only add API version if we have it\n ...(resource.apiVersion && { 'Accept-API-Version': resource.apiVersion }),\n // only send session cookie if we know its name and value\n ...(storage.session.getCookieName() &&\n storage.session.getCookieValue() && {\n Cookie: `${storage.session.getCookieName()}=${storage.session.getCookieValue()}`,\n }),\n };\n if (requestOverride['headers']) {\n headers = {\n ...headers,\n ...requestOverride['headers'],\n };\n }\n\n const requestDetails = {\n // baseURL: `${storage.session.getTenant()}/json${resource.path}`,\n timeout,\n ...requestOverride,\n headers: {\n ...headers,\n ...storage.session.getAuthenticationHeaderOverrides(),\n },\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates an IDM Axios API instance\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateIdmApi(requestOverride = {}) {\n const requestDetails = {\n // baseURL: getTenantURL(storage.session.getTenant()),\n timeout,\n headers: {\n 'User-Agent': userAgent,\n 'X-ForgeRock-TransactionId': transactionId,\n 'Content-Type': 'application/json',\n },\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n if (storage.session.getBearerToken()) {\n requestDetails.headers[\n 'Authorization'\n ] = `Bearer ${storage.session.getBearerToken()}`;\n }\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates a LogKeys API Axios instance\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateLogKeysApi(requestOverride = {}) {\n const headers = {\n 'User-Agent': userAgent,\n 'Content-Type': 'application/json',\n };\n const requestDetails = {\n // baseURL: getTenantURL(storage.session.getTenant()),\n timeout,\n headers,\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n if (storage.session.getBearerToken()) {\n requestDetails.headers[\n 'Authorization'\n ] = `Bearer ${storage.session.getBearerToken()}`;\n }\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates a Log API Axios instance\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateLogApi(requestOverride = {}) {\n const headers = {\n 'User-Agent': userAgent,\n 'X-API-Key': storage.session.getLogApiKey(),\n 'X-API-Secret': storage.session.getLogApiSecret(),\n };\n const requestDetails = {\n // baseURL: getTenantURL(storage.session.getTenant()),\n timeout,\n headers,\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates an ESV Axios API instance for Environment Secrets and Variables\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateESVApi(resource, requestOverride = {}) {\n const headers = {\n 'User-Agent': userAgent,\n 'Content-Type': 'application/json',\n // only add API version if we have it\n ...(resource.apiVersion && { 'Accept-API-Version': resource.apiVersion }),\n };\n const requestDetails = {\n // baseURL: getTenantURL(storage.session.getTenant()),\n timeout,\n headers,\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n if (storage.session.getBearerToken()) {\n requestDetails.headers[\n 'Authorization'\n ] = `Bearer ${storage.session.getBearerToken()}`;\n }\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n\n/**\n * Generates a release (Github or Npm) Axios API instance\n * @param {object} requestOverride Takes an object of AXIOS parameters that can be used to either add\n * on extra information or override default properties https://github.com/axios/axios#request-config\n *\n * @returns {AxiosInstance}\n */\nexport function generateReleaseApi(baseUrl, requestOverride = {}) {\n const requestDetails = {\n baseURL: baseUrl,\n timeout,\n headers: {\n 'User-Agent': userAgent,\n 'Content-Type': 'application/json',\n },\n ...requestOverride,\n httpAgent: getHttpAgent(),\n httpsAgent: getHttpsAgent(),\n proxy: getProxy(),\n };\n\n const request = axios.create(requestDetails);\n\n // enable curlirizer output in debug mode\n if (storage.session.getCurlirize()) {\n curlirize(request);\n }\n\n return request;\n}\n"],"mappings":"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"}
package/cjs/index.js CHANGED
@@ -3,20 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.state = exports.VariablesRaw = exports.Variables = exports.Utils = exports.TypesRaw = exports.Types = exports.TreeRaw = exports.ThemeRaw = exports.Theme = exports.StartupRaw = exports.Startup = exports.Service = exports.SecretsRaw = exports.Secrets = exports.Script = exports.Saml2 = exports.Realm = exports.Organization = exports.OAuth2OIDCApi = exports.OAuth2Client = exports.NodeRaw = exports.Node = exports.ManagedObject = exports.Log = exports.LibVersion = exports.Journey = exports.Idp = exports.Idm = exports.ExportImportUtils = exports.EmailTemplateRaw = exports.EmailTemplate = exports.ConnectionProfile = exports.CirclesOfTrust = exports.Authenticate = exports.AgentRaw = exports.Agent = exports.Admin = void 0;
6
+ exports.state = exports.VariablesRaw = exports.Variables = exports.Utils = exports.TypesRaw = exports.Types = exports.TreeRaw = exports.Theme = exports.StartupRaw = exports.Startup = exports.Service = exports.SecretsRaw = exports.Secrets = exports.Script = exports.Saml2 = exports.Realm = exports.Organization = exports.OAuth2OIDCApi = exports.OAuth2Client = exports.NodeRaw = exports.Node = exports.ManagedObject = exports.Log = exports.LibVersion = exports.Journey = exports.Idp = exports.Idm = exports.ExportImportUtils = exports.EmailTemplate = exports.ConnectionProfile = exports.CirclesOfTrust = exports.Authenticate = exports.AgentRaw = exports.Agent = exports.Admin = void 0;
7
7
  var _colors = _interopRequireDefault(require("colors"));
8
8
  var _AgentRaw = _interopRequireWildcard(require("./api/AgentApi"));
9
9
  exports.AgentRaw = _AgentRaw;
10
- var _EmailTemplateRaw = _interopRequireWildcard(require("./api/EmailTemplateApi"));
11
- exports.EmailTemplateRaw = _EmailTemplateRaw;
12
10
  var _NodeRaw = _interopRequireWildcard(require("./api/NodeApi"));
13
11
  exports.NodeRaw = _NodeRaw;
14
12
  var _SecretsRaw = _interopRequireWildcard(require("./api/SecretsApi"));
15
13
  exports.SecretsRaw = _SecretsRaw;
16
14
  var _StartupRaw = _interopRequireWildcard(require("./api/StartupApi"));
17
15
  exports.StartupRaw = _StartupRaw;
18
- var _ThemeRaw = _interopRequireWildcard(require("./api/ThemeApi"));
19
- exports.ThemeRaw = _ThemeRaw;
20
16
  var _TreeRaw = _interopRequireWildcard(require("./api/TreeApi"));
21
17
  exports.TreeRaw = _TreeRaw;
22
18
  var _TypesRaw = _interopRequireWildcard(require("./api/ApiTypes"));
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Color","enable"],"sources":["index.ts"],"sourcesContent":["import Color from 'colors';\n\nColor.enable();\n\n// Api Layer\nexport * as AgentRaw from './api/AgentApi';\nexport * as EmailTemplateRaw from './api/EmailTemplateApi';\nexport * as NodeRaw from './api/NodeApi';\nexport * as SecretsRaw from './api/SecretsApi';\nexport * as StartupRaw from './api/StartupApi';\nexport * as ThemeRaw from './api/ThemeApi';\nexport * as TreeRaw from './api/TreeApi';\nexport * as TypesRaw from './api/ApiTypes';\nexport * as VariablesRaw from './api/VariablesApi';\n\n// Ops Layer\nexport * as Admin from './ops/AdminOps';\nexport * as Agent from './ops/AgentOps';\nexport * as Authenticate from './ops/AuthenticateOps';\nexport * as CirclesOfTrust from './ops/CirclesOfTrustOps';\nexport * as ConnectionProfile from './ops/ConnectionProfileOps';\nexport * as EmailTemplate from './ops/EmailTemplateOps';\nexport * as Idm from './ops/IdmOps';\nexport * as Idp from './ops/IdpOps';\nexport * as Journey from './ops/JourneyOps';\nexport * as Log from './ops/LogOps';\nexport * as ManagedObject from './ops/ManagedObjectOps';\nexport * as Node from './ops/NodeOps';\nexport * as OAuth2Client from './ops/OAuth2ClientOps';\nexport * as Organization from './ops/OrganizationOps';\nexport * as Realm from './ops/RealmOps';\nexport * as Saml2 from './ops/Saml2Ops';\nexport * as Script from './ops/ScriptOps';\nexport * as Service from './ops/ServiceOps';\nexport * as Secrets from './ops/SecretsOps';\nexport * as Startup from './ops/StartupOps';\nexport * as Theme from './ops/ThemeOps';\nexport * as Types from './ops/OpsTypes';\nexport * as Variables from './ops/VariablesOps';\n// TODO: revisit if there are better ways\nexport * as Utils from './ops/utils/OpsUtils';\nexport * as LibVersion from './ops/utils/Version';\nexport * as ExportImportUtils from './ops/utils/ExportImportUtils';\n// TODO: reconsider the aproach to pass in state from client\n// lib should be stateless, an aplication should own its state\nexport * as state from './storage/SessionStorage';\n// TODO: need to figure out if this is the right approach or if we should even\n// use a public oauth2/oidc library. might be ok for now since there is only\n// one place where the cli needs to execute an oauth flow.\nexport * as OAuth2OIDCApi from './api/OAuth2OIDCApi';\n"],"mappings":";;;;;;AAAA;AAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAE3BA,eAAK,CAACC,MAAM,EAAE;;AAEd"}
1
+ {"version":3,"file":"index.js","names":["Color","enable"],"sources":["index.ts"],"sourcesContent":["import Color from 'colors';\n\nColor.enable();\n\n// Api Layer\nexport * as AgentRaw from './api/AgentApi';\nexport * as NodeRaw from './api/NodeApi';\nexport * as SecretsRaw from './api/SecretsApi';\nexport * as StartupRaw from './api/StartupApi';\nexport * as TreeRaw from './api/TreeApi';\nexport * as TypesRaw from './api/ApiTypes';\nexport * as VariablesRaw from './api/VariablesApi';\n\n// Ops Layer\nexport * as Admin from './ops/AdminOps';\nexport * as Agent from './ops/AgentOps';\nexport * as Authenticate from './ops/AuthenticateOps';\nexport * as CirclesOfTrust from './ops/CirclesOfTrustOps';\nexport * as ConnectionProfile from './ops/ConnectionProfileOps';\nexport * as EmailTemplate from './ops/EmailTemplateOps';\nexport * as Idm from './ops/IdmOps';\nexport * as Idp from './ops/IdpOps';\nexport * as Journey from './ops/JourneyOps';\nexport * as Log from './ops/LogOps';\nexport * as ManagedObject from './ops/ManagedObjectOps';\nexport * as Node from './ops/NodeOps';\nexport * as OAuth2Client from './ops/OAuth2ClientOps';\nexport * as Organization from './ops/OrganizationOps';\nexport * as Realm from './ops/RealmOps';\nexport * as Saml2 from './ops/Saml2Ops';\nexport * as Script from './ops/ScriptOps';\nexport * as Service from './ops/ServiceOps';\nexport * as Secrets from './ops/SecretsOps';\nexport * as Startup from './ops/StartupOps';\nexport * as Theme from './ops/ThemeOps';\nexport * as Types from './ops/OpsTypes';\nexport * as Variables from './ops/VariablesOps';\n// TODO: revisit if there are better ways\nexport * as Utils from './ops/utils/OpsUtils';\nexport * as LibVersion from './ops/utils/Version';\nexport * as ExportImportUtils from './ops/utils/ExportImportUtils';\n// TODO: reconsider the aproach to pass in state from client\n// lib should be stateless, an aplication should own its state\nexport * as state from './storage/SessionStorage';\n// TODO: need to figure out if this is the right approach or if we should even\n// use a public oauth2/oidc library. might be ok for now since there is only\n// one place where the cli needs to execute an oauth flow.\nexport * as OAuth2OIDCApi from './api/OAuth2OIDCApi';\n"],"mappings":";;;;;;AAAA;AAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAE3BA,eAAK,CAACC,MAAM,EAAE;;AAEd"}
@@ -25,13 +25,14 @@ var dataProtection = new _DataProtection.default();
25
25
  var fileOptions = {
26
26
  indentation: 4
27
27
  };
28
-
28
+ var legacyProfileFilename = '.frodorc';
29
+ var newProfileFilename = 'Connections.json';
29
30
  /**
30
31
  * Get connection profiles file name
31
32
  * @returns {String} connection profiles file name
32
33
  */
33
34
  function getConnectionProfilesPath() {
34
- return _SessionStorage.default.session.getConnectionProfilesPath() || process.env[_StaticStorage.FRODO_CONNECTION_PROFILES_PATH_KEY] || "".concat(_os.default.homedir(), "/.frodo/.frodorc");
35
+ return _SessionStorage.default.session.getConnectionProfilesPath() || process.env[_StaticStorage.FRODO_CONNECTION_PROFILES_PATH_KEY] || "".concat(_os.default.homedir(), "/.frodo/").concat(newProfileFilename);
35
36
  }
36
37
 
37
38
  /**
@@ -79,6 +80,21 @@ function listConnectionProfiles() {
79
80
  }
80
81
  }
81
82
 
83
+ /**
84
+ * Migrate from .frodorc to Connections.json
85
+ * @returns {String} connections profile filename
86
+ */
87
+ function migrateFromLegacyProfile() {
88
+ var legacyPath = "".concat(_os.default.homedir(), "/.frodo/").concat(legacyProfileFilename);
89
+ if (_fs.default.existsSync(legacyPath)) {
90
+ _fs.default.copyFileSync(legacyPath, "".concat(_os.default.homedir(), "/.frodo/").concat(newProfileFilename));
91
+ // for now, just add a "deprecated" suffix. May delete the old file
92
+ // in a future release
93
+ _fs.default.renameSync(legacyPath, "".concat(legacyPath, ".deprecated"));
94
+ }
95
+ return;
96
+ }
97
+
82
98
  /**
83
99
  * Initialize connection profiles
84
100
  */
@@ -96,6 +112,7 @@ function initConnectionProfiles() {
96
112
  }
97
113
  // encrypt the password from clear text to aes-256-GCM
98
114
  else {
115
+ migrateFromLegacyProfile();
99
116
  var data = _fs.default.readFileSync(filename, 'utf8');
100
117
  var connectionsData = JSON.parse(data);
101
118
  var convert = false;
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionProfileOps.js","names":["dataProtection","DataProtection","fileOptions","indentation","getConnectionProfilesPath","storage","session","process","env","FRODO_CONNECTION_PROFILES_PATH_KEY","os","homedir","findConnectionProfile","connectionProfiles","host","profiles","tenant","includes","foundProfile","push","listConnectionProfiles","long","filename","data","fs","readFileSync","connectionsData","JSON","parse","table","createTable","Object","keys","forEach","c","username","logApiKey","printMessage","toString","e","message","initConnectionProfiles","folderName","path","dirname","existsSync","mkdirSync","recursive","writeFileSync","stringify","convert","conn","password","encodedPassword","encrypt","getConnectionProfileByHost","length","p","decrypt","key","secret","logApiSecret","authenticationService","authenticationHeaderOverrides","getConnectionProfile","getTenant","saveConnectionProfile","existingData","statSync","getUsername","getPassword","getLogApiKey","getLogApiSecret","getAuthenticationService","getAuthenticationHeaderOverrides","deleteConnectionProfile","stat","err","code","describeConnectionProfile","showSecrets","profile","keyMap","createObjectTable"],"sources":["ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport storage from '../storage/SessionStorage';\nimport DataProtection from './utils/DataProtection';\nimport { createObjectTable, createTable, printMessage } from './utils/Console';\nimport { FRODO_CONNECTION_PROFILES_PATH_KEY } from '../storage/StaticStorage';\nimport { profile } from 'console';\n\nconst dataProtection = new DataProtection();\n\nconst fileOptions = {\n indentation: 4,\n};\n\n/**\n * Get connection profiles file name\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath(): string {\n return (\n storage.session.getConnectionProfilesPath() ||\n process.env[FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/.frodorc`\n );\n}\n\n/**\n * Find connection profile\n * @param {Object} connectionProfiles connection profile object\n * @param {String} host tenant host url or unique substring\n * @returns {Object} connection profile object or null\n */\nfunction findConnectionProfile(connectionProfiles, host) {\n const profiles = [];\n for (const tenant in connectionProfiles) {\n if (tenant.includes(host)) {\n const foundProfile = connectionProfiles[tenant];\n foundProfile.tenant = tenant;\n profiles.push(foundProfile);\n }\n }\n return profiles;\n}\n\n/**\n * List connection profiles\n * @param {boolean} long Long list format with details\n */\nexport function listConnectionProfiles(long = false) {\n const filename = getConnectionProfilesPath();\n try {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n if (long) {\n const table = createTable(['Host', 'Username', 'Log API Key']);\n Object.keys(connectionsData).forEach((c) => {\n table.push([\n c,\n connectionsData[c].username,\n connectionsData[c].logApiKey,\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n Object.keys(connectionsData).forEach((c) => {\n printMessage(`${c}`, 'data');\n });\n }\n printMessage(\n 'Any unique substring of a saved host can be used as the value for host parameter in all commands',\n 'info'\n );\n } catch (e) {\n printMessage(`No connections found in ${filename} (${e.message})`, 'error');\n }\n}\n\n/**\n * Initialize connection profiles\n */\nexport function initConnectionProfiles() {\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath();\n const folderName = path.dirname(filename);\n if (!fs.existsSync(folderName)) {\n fs.mkdirSync(folderName, { recursive: true });\n if (!fs.existsSync(filename)) {\n fs.writeFileSync(\n filename,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n }\n }\n // encrypt the password from clear text to aes-256-GCM\n else {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n let convert = false;\n Object.keys(connectionsData).forEach(async (conn) => {\n if (connectionsData[conn].password) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn].password\n ); // Buffer.from(connectionsData[conn].password).toString('base64');\n delete connectionsData[conn].password;\n }\n });\n if (convert) {\n fs.writeFileSync(\n filename,\n JSON.stringify(connectionsData, null, fileOptions.indentation)\n );\n }\n }\n}\n\n/**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost(host) {\n try {\n const filename = getConnectionProfilesPath();\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profiles = findConnectionProfile(connectionsData, host);\n if (profiles.length == 0) {\n printMessage(\n `Profile for ${host} not found. Please specify credentials on command line`,\n 'error'\n );\n return null;\n }\n if (profiles.length > 1) {\n printMessage(`Multiple matching profiles found.`, 'error');\n profiles.forEach((p) => {\n printMessage(`- ${p.tenant}`, 'error');\n });\n printMessage(`Please specify a unique sub-string`, 'error');\n return null;\n }\n return {\n tenant: profiles[0].tenant,\n username: profiles[0].username ? profiles[0].username : null,\n password: profiles[0].encodedPassword\n ? await dataProtection.decrypt(profiles[0].encodedPassword)\n : null,\n key: profiles[0].logApiKey ? profiles[0].logApiKey : null,\n secret: profiles[0].logApiSecret ? profiles[0].logApiSecret : null,\n authenticationService: profiles[0].authenticationService\n ? profiles[0].authenticationService\n : null,\n authenticationHeaderOverrides: profiles[0].authenticationHeaderOverrides\n ? profiles[0].authenticationHeaderOverrides\n : {},\n };\n } catch (e) {\n printMessage(\n `Can not read saved connection info, please specify credentials on command line: ${e}`,\n 'error'\n );\n return null;\n }\n}\n\n/**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfile() {\n return getConnectionProfileByHost(storage.session.getTenant());\n}\n\n/**\n * Save connection profile\n */\nexport async function saveConnectionProfile() {\n const filename = getConnectionProfilesPath();\n printMessage(`Saving creds in ${filename}...`);\n let connectionsData = {};\n let existingData = {};\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n if (connectionsData[storage.session.getTenant()]) {\n existingData = connectionsData[storage.session.getTenant()];\n printMessage(\n `Updating connection profile ${storage.session.getTenant()}`\n );\n } else\n printMessage(`Adding connection profile ${storage.session.getTenant()}`);\n } catch (e) {\n printMessage(\n `Creating connection profiles file ${filename} with ${storage.session.getTenant()}`\n );\n }\n if (storage.session.getUsername())\n existingData['username'] = storage.session.getUsername();\n if (storage.session.getPassword())\n existingData['encodedPassword'] = await dataProtection.encrypt(\n storage.session.getPassword()\n );\n if (storage.session.getLogApiKey())\n existingData['logApiKey'] = storage.session.getLogApiKey();\n if (storage.session.getLogApiSecret())\n existingData['logApiSecret'] = storage.session.getLogApiSecret();\n\n // advanced settings\n if (storage.session.getAuthenticationService()) {\n existingData['authenticationService'] =\n storage.session.getAuthenticationService();\n printMessage(\n 'Advanced setting: Authentication Service: ' +\n storage.session.getAuthenticationService(),\n 'info'\n );\n }\n if (storage.session.getAuthenticationHeaderOverrides()) {\n existingData['authenticationHeaderOverrides'] =\n storage.session.getAuthenticationHeaderOverrides();\n printMessage('Advanced setting: Authentication Header Overrides: ', 'info');\n printMessage(storage.session.getAuthenticationHeaderOverrides(), 'info');\n }\n\n connectionsData[storage.session.getTenant()] = existingData;\n\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile(host) {\n const filename = getConnectionProfilesPath();\n let connectionsData = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profiles = findConnectionProfile(connectionsData, host);\n if (profiles.length == 1) {\n printMessage(`Deleting connection profile ${profiles[0].tenant}`);\n delete connectionsData[profiles[0].tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n } else {\n if (profiles.length > 1) {\n printMessage(`Multiple matching profiles found.`, 'error');\n profiles.forEach((p) => {\n printMessage(`- ${p.tenant}`, 'error');\n });\n printMessage(`Please specify a unique sub-string`, 'error');\n return null;\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n }\n } else if (err.code === 'ENOENT') {\n printMessage(`Connection profile file ${filename} not found`);\n } else {\n printMessage(\n `Error in deleting connection profile: ${err.code}`,\n 'error'\n );\n }\n });\n}\n\nexport async function describeConnectionProfile(host, showSecrets) {\n const profile = await getConnectionProfileByHost(host);\n if (profile) {\n if (!showSecrets) {\n delete profile.password;\n delete profile.secret;\n }\n if (!profile.key) {\n delete profile.key;\n delete profile.secret;\n }\n const keyMap = {\n tenant: 'Host',\n username: 'Username',\n password: 'Password',\n key: 'Log API Key',\n secret: 'Log API Secret',\n authenticationService: 'Authentication Service',\n authenticationHeaderOverrides: 'Authentication Header Overrides',\n };\n const table = createObjectTable(profile, keyMap);\n printMessage(table.toString(), 'data');\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConnectionProfileOps.js","names":["dataProtection","DataProtection","fileOptions","indentation","legacyProfileFilename","newProfileFilename","getConnectionProfilesPath","storage","session","process","env","FRODO_CONNECTION_PROFILES_PATH_KEY","os","homedir","findConnectionProfile","connectionProfiles","host","profiles","tenant","includes","foundProfile","push","listConnectionProfiles","long","filename","data","fs","readFileSync","connectionsData","JSON","parse","table","createTable","Object","keys","forEach","c","username","logApiKey","printMessage","toString","e","message","migrateFromLegacyProfile","legacyPath","existsSync","copyFileSync","renameSync","initConnectionProfiles","folderName","path","dirname","mkdirSync","recursive","writeFileSync","stringify","convert","conn","password","encodedPassword","encrypt","getConnectionProfileByHost","length","p","decrypt","key","secret","logApiSecret","authenticationService","authenticationHeaderOverrides","getConnectionProfile","getTenant","saveConnectionProfile","existingData","statSync","getUsername","getPassword","getLogApiKey","getLogApiSecret","getAuthenticationService","getAuthenticationHeaderOverrides","deleteConnectionProfile","stat","err","code","describeConnectionProfile","showSecrets","profile","keyMap","createObjectTable"],"sources":["ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport storage from '../storage/SessionStorage';\nimport DataProtection from './utils/DataProtection';\nimport { createObjectTable, createTable, printMessage } from './utils/Console';\nimport { FRODO_CONNECTION_PROFILES_PATH_KEY } from '../storage/StaticStorage';\n\nconst dataProtection = new DataProtection();\n\nconst fileOptions = {\n indentation: 4,\n};\n\nconst legacyProfileFilename = '.frodorc';\nconst newProfileFilename = 'Connections.json';\n/**\n * Get connection profiles file name\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath(): string {\n return (\n storage.session.getConnectionProfilesPath() ||\n process.env[FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/${newProfileFilename}`\n );\n}\n\n/**\n * Find connection profile\n * @param {Object} connectionProfiles connection profile object\n * @param {String} host tenant host url or unique substring\n * @returns {Object} connection profile object or null\n */\nfunction findConnectionProfile(connectionProfiles, host) {\n const profiles = [];\n for (const tenant in connectionProfiles) {\n if (tenant.includes(host)) {\n const foundProfile = connectionProfiles[tenant];\n foundProfile.tenant = tenant;\n profiles.push(foundProfile);\n }\n }\n return profiles;\n}\n\n/**\n * List connection profiles\n * @param {boolean} long Long list format with details\n */\nexport function listConnectionProfiles(long = false) {\n const filename = getConnectionProfilesPath();\n try {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n if (long) {\n const table = createTable(['Host', 'Username', 'Log API Key']);\n Object.keys(connectionsData).forEach((c) => {\n table.push([\n c,\n connectionsData[c].username,\n connectionsData[c].logApiKey,\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n Object.keys(connectionsData).forEach((c) => {\n printMessage(`${c}`, 'data');\n });\n }\n printMessage(\n 'Any unique substring of a saved host can be used as the value for host parameter in all commands',\n 'info'\n );\n } catch (e) {\n printMessage(`No connections found in ${filename} (${e.message})`, 'error');\n }\n}\n\n/**\n * Migrate from .frodorc to Connections.json\n * @returns {String} connections profile filename\n */\nfunction migrateFromLegacyProfile() {\n const legacyPath = `${os.homedir()}/.frodo/${legacyProfileFilename}`;\n if (fs.existsSync(legacyPath)) {\n fs.copyFileSync(legacyPath, `${os.homedir()}/.frodo/${newProfileFilename}`);\n // for now, just add a \"deprecated\" suffix. May delete the old file\n // in a future release\n fs.renameSync(legacyPath, `${legacyPath}.deprecated`);\n }\n return;\n}\n\n/**\n * Initialize connection profiles\n */\nexport function initConnectionProfiles() {\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath();\n const folderName = path.dirname(filename);\n if (!fs.existsSync(folderName)) {\n fs.mkdirSync(folderName, { recursive: true });\n if (!fs.existsSync(filename)) {\n fs.writeFileSync(\n filename,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n }\n }\n // encrypt the password from clear text to aes-256-GCM\n else {\n migrateFromLegacyProfile();\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n let convert = false;\n Object.keys(connectionsData).forEach(async (conn) => {\n if (connectionsData[conn].password) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn].password\n ); // Buffer.from(connectionsData[conn].password).toString('base64');\n delete connectionsData[conn].password;\n }\n });\n if (convert) {\n fs.writeFileSync(\n filename,\n JSON.stringify(connectionsData, null, fileOptions.indentation)\n );\n }\n }\n}\n\n/**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost(host) {\n try {\n const filename = getConnectionProfilesPath();\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profiles = findConnectionProfile(connectionsData, host);\n if (profiles.length == 0) {\n printMessage(\n `Profile for ${host} not found. Please specify credentials on command line`,\n 'error'\n );\n return null;\n }\n if (profiles.length > 1) {\n printMessage(`Multiple matching profiles found.`, 'error');\n profiles.forEach((p) => {\n printMessage(`- ${p.tenant}`, 'error');\n });\n printMessage(`Please specify a unique sub-string`, 'error');\n return null;\n }\n return {\n tenant: profiles[0].tenant,\n username: profiles[0].username ? profiles[0].username : null,\n password: profiles[0].encodedPassword\n ? await dataProtection.decrypt(profiles[0].encodedPassword)\n : null,\n key: profiles[0].logApiKey ? profiles[0].logApiKey : null,\n secret: profiles[0].logApiSecret ? profiles[0].logApiSecret : null,\n authenticationService: profiles[0].authenticationService\n ? profiles[0].authenticationService\n : null,\n authenticationHeaderOverrides: profiles[0].authenticationHeaderOverrides\n ? profiles[0].authenticationHeaderOverrides\n : {},\n };\n } catch (e) {\n printMessage(\n `Can not read saved connection info, please specify credentials on command line: ${e}`,\n 'error'\n );\n return null;\n }\n}\n\n/**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfile() {\n return getConnectionProfileByHost(storage.session.getTenant());\n}\n\n/**\n * Save connection profile\n */\nexport async function saveConnectionProfile() {\n const filename = getConnectionProfilesPath();\n printMessage(`Saving creds in ${filename}...`);\n let connectionsData = {};\n let existingData = {};\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n if (connectionsData[storage.session.getTenant()]) {\n existingData = connectionsData[storage.session.getTenant()];\n printMessage(\n `Updating connection profile ${storage.session.getTenant()}`\n );\n } else\n printMessage(`Adding connection profile ${storage.session.getTenant()}`);\n } catch (e) {\n printMessage(\n `Creating connection profiles file ${filename} with ${storage.session.getTenant()}`\n );\n }\n if (storage.session.getUsername())\n existingData['username'] = storage.session.getUsername();\n if (storage.session.getPassword())\n existingData['encodedPassword'] = await dataProtection.encrypt(\n storage.session.getPassword()\n );\n if (storage.session.getLogApiKey())\n existingData['logApiKey'] = storage.session.getLogApiKey();\n if (storage.session.getLogApiSecret())\n existingData['logApiSecret'] = storage.session.getLogApiSecret();\n\n // advanced settings\n if (storage.session.getAuthenticationService()) {\n existingData['authenticationService'] =\n storage.session.getAuthenticationService();\n printMessage(\n 'Advanced setting: Authentication Service: ' +\n storage.session.getAuthenticationService(),\n 'info'\n );\n }\n if (storage.session.getAuthenticationHeaderOverrides()) {\n existingData['authenticationHeaderOverrides'] =\n storage.session.getAuthenticationHeaderOverrides();\n printMessage('Advanced setting: Authentication Header Overrides: ', 'info');\n printMessage(storage.session.getAuthenticationHeaderOverrides(), 'info');\n }\n\n connectionsData[storage.session.getTenant()] = existingData;\n\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile(host) {\n const filename = getConnectionProfilesPath();\n let connectionsData = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profiles = findConnectionProfile(connectionsData, host);\n if (profiles.length == 1) {\n printMessage(`Deleting connection profile ${profiles[0].tenant}`);\n delete connectionsData[profiles[0].tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n } else {\n if (profiles.length > 1) {\n printMessage(`Multiple matching profiles found.`, 'error');\n profiles.forEach((p) => {\n printMessage(`- ${p.tenant}`, 'error');\n });\n printMessage(`Please specify a unique sub-string`, 'error');\n return null;\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n }\n } else if (err.code === 'ENOENT') {\n printMessage(`Connection profile file ${filename} not found`);\n } else {\n printMessage(\n `Error in deleting connection profile: ${err.code}`,\n 'error'\n );\n }\n });\n}\n\nexport async function describeConnectionProfile(host, showSecrets) {\n const profile = await getConnectionProfileByHost(host);\n if (profile) {\n if (!showSecrets) {\n delete profile.password;\n delete profile.secret;\n }\n if (!profile.key) {\n delete profile.key;\n delete profile.secret;\n }\n const keyMap = {\n tenant: 'Host',\n username: 'Username',\n password: 'Password',\n key: 'Log API Key',\n secret: 'Log API Secret',\n authenticationService: 'Authentication Service',\n authenticationHeaderOverrides: 'Authentication Header Overrides',\n };\n const table = createObjectTable(profile, keyMap);\n printMessage(table.toString(), 'data');\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n}\n"],"mappings":"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"}