@rockcarver/frodo-lib 2.0.0-29 → 2.0.0-30

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/build.zip CHANGED
Binary file
@@ -142,7 +142,16 @@ function getConnectionProfilesPath(_ref) {
142
142
  var {
143
143
  state
144
144
  } = _ref;
145
- return state.getConnectionProfilesPath() || process.env[_Constants.default.FRODO_CONNECTION_PROFILES_PATH_KEY] || "".concat(_os.default.homedir(), "/.frodo/").concat(newProfileFilename);
145
+ (0, _Console.debugMessage)({
146
+ message: "ConnectionProfileOps.getConnectionProfilesPath: start",
147
+ state
148
+ });
149
+ var profilesPath = state.getConnectionProfilesPath() || process.env[_Constants.default.FRODO_CONNECTION_PROFILES_PATH_KEY] || "".concat(_os.default.homedir(), "/.frodo/").concat(newProfileFilename);
150
+ (0, _Console.debugMessage)({
151
+ message: "ConnectionProfileOps.getConnectionProfilesPath: end [profilesPath=".concat(profilesPath, "]"),
152
+ state
153
+ });
154
+ return profilesPath;
146
155
  }
147
156
 
148
157
  /**
@@ -218,6 +227,10 @@ function _initConnectionProfiles() {
218
227
  var {
219
228
  state
220
229
  } = _ref3;
230
+ (0, _Console.debugMessage)({
231
+ message: "ConnectionProfileOps.initConnectionProfiles: start",
232
+ state
233
+ });
221
234
  var dataProtection = new _DataProtection.default({
222
235
  pathToMasterKey: state.getMasterKeyPath(),
223
236
  state
@@ -227,11 +240,21 @@ function _initConnectionProfiles() {
227
240
  state
228
241
  });
229
242
  var folderName = _path.default.dirname(filename);
230
- if (!_fs.default.existsSync(folderName)) {
231
- _fs.default.mkdirSync(folderName, {
232
- recursive: true
233
- });
243
+ if (!_fs.default.existsSync(filename)) {
244
+ if (!_fs.default.existsSync(folderName)) {
245
+ (0, _Console.debugMessage)({
246
+ message: "ConnectionProfileOps.initConnectionProfiles: folder does not exist: ".concat(folderName, ", creating..."),
247
+ state
248
+ });
249
+ _fs.default.mkdirSync(folderName, {
250
+ recursive: true
251
+ });
252
+ }
234
253
  if (!_fs.default.existsSync(filename)) {
254
+ (0, _Console.debugMessage)({
255
+ message: "ConnectionProfileOps.initConnectionProfiles: file does not exist: ".concat(filename, ", creating..."),
256
+ state
257
+ });
235
258
  _fs.default.writeFileSync(filename, JSON.stringify({}, null, fileOptions.indentation));
236
259
  }
237
260
  }
@@ -262,6 +285,10 @@ function _initConnectionProfiles() {
262
285
  _fs.default.writeFileSync(filename, JSON.stringify(connectionsData, null, fileOptions.indentation));
263
286
  }
264
287
  }
288
+ (0, _Console.debugMessage)({
289
+ message: "ConnectionProfileOps.initConnectionProfiles: end",
290
+ state
291
+ });
265
292
  });
266
293
  return _initConnectionProfiles.apply(this, arguments);
267
294
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionProfileOps.js","names":["_fs","_interopRequireDefault","require","_os","_path","_Constants","_Console","_DataProtection","_ExportImportUtils","_MiscUtils","_ServiceAccountOps","_JoseOps","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","error","done","Promise","then","_asyncToGenerator","fn","self","args","err","_default","state","getConnectionProfilesPath","findConnectionProfiles","connectionProfiles","host","initConnectionProfiles","getConnectionProfileByHost","getConnectionProfile","saveConnectionProfile","deleteConnectionProfile","addNewServiceAccount","exports","fileOptions","indentation","legacyProfileFilename","newProfileFilename","_ref","process","env","Constants","FRODO_CONNECTION_PROFILES_PATH_KEY","concat","os","homedir","_ref2","profiles","tenant","debugMessage","message","includes","foundProfile","migrateFromLegacyProfile","legacyPath","newPath","fs","existsSync","writeFileSync","JSON","stringify","copyFileSync","renameSync","_x","_initConnectionProfiles","_ref3","dataProtection","DataProtection","pathToMasterKey","getMasterKeyPath","filename","folderName","path","dirname","mkdirSync","recursive","data","readFileSync","connectionsData","parse","convert","conn","encodedPassword","encrypt","encodedLogApiSecret","encodedSvcacctJwk","_x2","_getConnectionProfileByHost","_ref4","printMessage","type","p","username","password","decrypt","logApiKey","logApiSecret","authenticationService","authenticationHeaderOverrides","svcacctName","svcacctId","svcacctJwk","_x3","_getConnectionProfile","_ref5","getHost","_x4","_saveConnectionProfile","_ref6","profile","statSync","found","setHost","verboseMessage","isValidUrl","getUsername","getPassword","getLogApiKey","getLogApiSecret","getServiceAccountId","getBearerToken","getServiceAccount","serviceAccountId","name","getServiceAccountJwk","getAuthenticationService","getAuthenticationHeaderOverrides","entries","orderedProfiles","sort","reduce","saveJsonToFile","includeMeta","_ref7","stat","code","_x5","_addNewServiceAccount","_ref8","Date","getTime","description","scope","jwkPrivate","createJwkRsa","jwkPublic","getJwkRsaPublic","jwks","createJwks","sa","createServiceAccount","accountStatus","scopes","_id","setServiceAccountId","setServiceAccountJwk"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { IdObjectSkeletonInterface } from '../api/ApiTypes';\nimport Constants from '../shared/Constants';\nimport { State } from '../shared/State';\nimport { debugMessage, printMessage, verboseMessage } from '../utils/Console';\nimport DataProtection from '../utils/DataProtection';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport { isValidUrl } from '../utils/MiscUtils';\nimport {\n createServiceAccount,\n getServiceAccount,\n} from './cloud/ServiceAccountOps';\nimport { createJwkRsa, createJwks, getJwkRsaPublic, JwkRsa } from './JoseOps';\n\nexport type ConnectionProfile = {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string;\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[];\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n initConnectionProfiles(): Promise<void>;\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 */\n getConnectionProfileByHost(host: string): Promise<ConnectionProfileInterface>;\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n getConnectionProfile(): Promise<ConnectionProfileInterface>;\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n saveConnectionProfile(host: string): Promise<boolean>;\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void;\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n addNewServiceAccount(): Promise<IdObjectSkeletonInterface>;\n};\n\nexport default (state: State): ConnectionProfile => {\n return {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string {\n return getConnectionProfilesPath({ state });\n },\n\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[] {\n return findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n });\n },\n\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n async initConnectionProfiles() {\n initConnectionProfiles({ state });\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 */\n async getConnectionProfileByHost(\n host: string\n ): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host, state });\n },\n\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n async getConnectionProfile(): Promise<ConnectionProfileInterface> {\n return getConnectionProfile({ state });\n },\n\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n async saveConnectionProfile(host: string): Promise<boolean> {\n return saveConnectionProfile({ host, state });\n },\n\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void {\n deleteConnectionProfile({ host, state });\n },\n\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n async addNewServiceAccount(): Promise<IdObjectSkeletonInterface> {\n return addNewServiceAccount({ state });\n },\n };\n};\n\nconst fileOptions = {\n indentation: 4,\n};\n\nexport interface SecureConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n encodedPassword?: string | null;\n logApiKey?: string | null;\n encodedLogApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n encodedSvcacctJwk?: string | null;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n password?: string | null;\n logApiKey?: string | null;\n logApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n svcacctJwk?: JwkRsa;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionsFileInterface {\n [key: string]: SecureConnectionProfileInterface;\n}\n\nconst legacyProfileFilename = '.frodorc';\nconst newProfileFilename = 'Connections.json';\n\n/**\n * Get connection profiles file name\n * @param {State} state library state\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath({ state }: { state: State }): string {\n return (\n state.getConnectionProfilesPath() ||\n process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/${newProfileFilename}`\n );\n}\n\n/**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @param {State} state library state\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\nfunction findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n}: {\n connectionProfiles: ConnectionsFileInterface;\n host: string;\n state: State;\n}): SecureConnectionProfileInterface[] {\n const profiles: SecureConnectionProfileInterface[] = [];\n for (const tenant in connectionProfiles) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: tenant=${tenant}`,\n state,\n });\n if (tenant.includes(host)) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: '${host}' identifies '${tenant}', including in result set`,\n state,\n });\n const foundProfile = { ...connectionProfiles[tenant] };\n foundProfile.tenant = tenant;\n profiles.push(foundProfile);\n }\n }\n return profiles;\n}\n\n/**\n * Migrate from .frodorc to Connections.json\n */\nfunction migrateFromLegacyProfile() {\n const legacyPath = `${os.homedir()}/.frodo/${legacyProfileFilename}`;\n const newPath = `${os.homedir()}/.frodo/${newProfileFilename}`;\n if (!fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // no connections file (old or new), create empty new one\n fs.writeFileSync(\n newPath,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n } else if (fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // old exists, new one does not - so copy old to new one\n fs.copyFileSync(legacyPath, newPath);\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 // in other cases, where\n // (both old and new exist) OR (only new one exists) don't do anything\n}\n\n/**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n * @param {State} state library state\n */\nexport async function initConnectionProfiles({ state }: { state: State }) {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath({ state });\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 and logApiSecret from clear text to aes-256-GCM\n else {\n migrateFromLegacyProfile();\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData: ConnectionsFileInterface = JSON.parse(data);\n let convert = false;\n for (const conn of Object.keys(connectionsData)) {\n if (connectionsData[conn]['password']) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn]['password']\n );\n delete connectionsData[conn]['password'];\n }\n if (connectionsData[conn]['logApiSecret']) {\n convert = true;\n connectionsData[conn].encodedLogApiSecret =\n await dataProtection.encrypt(connectionsData[conn]['logApiSecret']);\n delete connectionsData[conn]['logApiSecret'];\n }\n if (connectionsData[conn]['svcacctJwk']) {\n convert = true;\n connectionsData[conn].encodedSvcacctJwk = await dataProtection.encrypt(\n connectionsData[conn]['svcacctJwk']\n );\n delete connectionsData[conn]['svcacctJwk'];\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 * @param {State} state library state\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<ConnectionProfileInterface> {\n try {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 0) {\n printMessage({\n message: `Profile for ${host} not found. Please specify credentials on command line`,\n type: 'error',\n state,\n });\n return null;\n }\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\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 logApiKey: profiles[0].logApiKey ? profiles[0].logApiKey : null,\n logApiSecret: profiles[0].encodedLogApiSecret\n ? await dataProtection.decrypt(profiles[0].encodedLogApiSecret)\n : null,\n authenticationService: profiles[0].authenticationService\n ? profiles[0].authenticationService\n : null,\n authenticationHeaderOverrides: profiles[0].authenticationHeaderOverrides\n ? profiles[0].authenticationHeaderOverrides\n : {},\n svcacctName: profiles[0].svcacctName ? profiles[0].svcacctName : null,\n svcacctId: profiles[0].svcacctId ? profiles[0].svcacctId : null,\n svcacctJwk: profiles[0].encodedSvcacctJwk\n ? await dataProtection.decrypt(profiles[0].encodedSvcacctJwk)\n : null,\n };\n } catch (e) {\n printMessage({\n message: `Can not read saved connection info, please specify credentials on command line: ${e}`,\n type: 'error',\n state,\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 state,\n}: {\n state: State;\n}): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host: state.getHost(), state });\n}\n\n/**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\nexport async function saveConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<boolean> {\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: start`,\n state,\n });\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n debugMessage({ message: `Saving connection profile in ${filename}`, state });\n let profiles: ConnectionsFileInterface = {};\n let profile: SecureConnectionProfileInterface = { tenant: '' };\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n profiles = JSON.parse(data);\n\n // find tenant\n const found = findConnectionProfiles({\n connectionProfiles: profiles,\n host,\n state,\n });\n\n // replace tenant in session with real tenant url if necessary\n if (found.length === 1) {\n profile = found[0];\n state.setHost(profile.tenant);\n verboseMessage({ message: `Existing profile: ${profile.tenant}`, state });\n debugMessage({ message: profile, state });\n }\n\n // connection profile not found, validate host is a real URL\n if (found.length === 0) {\n if (isValidUrl(host)) {\n state.setHost(host);\n debugMessage({ message: `New profile: ${host}`, state });\n } else {\n printMessage({\n message: `No existing profile found matching '${host}'. Provide a valid URL as the host argument to create a new profile.`,\n type: 'error',\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [false]`,\n state,\n });\n return false;\n }\n }\n } catch (error) {\n debugMessage({\n message: `New profiles file ${filename} with new profile ${host}`,\n state,\n });\n }\n\n // user account\n if (state.getUsername()) profile.username = state.getUsername();\n if (state.getPassword())\n profile.encodedPassword = await dataProtection.encrypt(state.getPassword());\n\n // log API\n if (state.getLogApiKey()) profile.logApiKey = state.getLogApiKey();\n if (state.getLogApiSecret())\n profile.encodedLogApiSecret = await dataProtection.encrypt(\n state.getLogApiSecret()\n );\n\n // service account\n if (state.getServiceAccountId()) {\n profile.svcacctId = state.getServiceAccountId();\n if (state.getBearerToken()) {\n profile.svcacctName = (\n await getServiceAccount({\n serviceAccountId: state.getServiceAccountId(),\n state,\n })\n ).name;\n }\n }\n if (state.getServiceAccountJwk())\n profile.encodedSvcacctJwk = await dataProtection.encrypt(\n state.getServiceAccountJwk()\n );\n // update existing service account profile\n if (state.getBearerToken() && profile.svcacctId && !profile.svcacctName) {\n profile.svcacctName = (\n await getServiceAccount({ serviceAccountId: profile.svcacctId, state })\n ).name;\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: added missing service account name`,\n state,\n });\n }\n\n // advanced settings\n if (state.getAuthenticationService()) {\n profile.authenticationService = state.getAuthenticationService();\n printMessage({\n message:\n 'Advanced setting: Authentication Service: ' +\n state.getAuthenticationService(),\n type: 'info',\n state,\n });\n }\n if (\n state.getAuthenticationHeaderOverrides() &&\n Object.entries(state.getAuthenticationHeaderOverrides()).length\n ) {\n profile.authenticationHeaderOverrides =\n state.getAuthenticationHeaderOverrides();\n printMessage({\n message: 'Advanced setting: Authentication Header Overrides: ',\n type: 'info',\n state,\n });\n printMessage({\n message: state.getAuthenticationHeaderOverrides(),\n type: 'info',\n state,\n });\n }\n\n // remove the helper key 'tenant'\n delete profile.tenant;\n\n // update profiles\n profiles[state.getHost()] = profile;\n\n // sort profiles\n const orderedProfiles = Object.keys(profiles)\n .sort()\n .reduce((obj, key) => {\n obj[key] = profiles[key];\n return obj;\n }, {});\n\n // save profiles\n saveJsonToFile({\n data: orderedProfiles,\n filename,\n includeMeta: false,\n state,\n });\n verboseMessage({\n message: `Saved connection profile ${state.getHost()} in ${filename}`,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [true]`,\n state,\n });\n return true;\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}) {\n const filename = getConnectionProfilesPath({ state });\n let connectionsData: ConnectionsFileInterface = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 1) {\n delete connectionsData[profiles[0].tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n printMessage({\n message: `Deleted connection profile ${profiles[0].tenant}`,\n state,\n });\n } else {\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\n return null;\n } else {\n printMessage({\n message: `No connection profile ${host} found`,\n state,\n });\n }\n }\n } else if (err.code === 'ENOENT') {\n printMessage({\n message: `Connection profile file ${filename} not found`,\n state,\n });\n } else {\n printMessage({\n message: `Error in deleting connection profile: ${err.code}`,\n type: 'error',\n state,\n });\n }\n });\n}\n\n/**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function addNewServiceAccount({\n state,\n}: {\n state: State;\n}): Promise<IdObjectSkeletonInterface> {\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: start`,\n state,\n });\n const name = `Frodo-SA-${new Date().getTime()}`;\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: name=${name}...`,\n state,\n });\n const description = `${state.getUsername()}'s Frodo Service Account`;\n const scope = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwkPrivate = await createJwkRsa();\n const jwkPublic = await getJwkRsaPublic(jwkPrivate);\n const jwks = createJwks(jwkPublic);\n const sa = await createServiceAccount({\n name,\n description,\n accountStatus: 'Active',\n scopes: scope,\n jwks,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: id=${sa._id}`,\n state,\n });\n state.setServiceAccountId(sa._id);\n state.setServiceAccountJwk(jwkPrivate);\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: end`,\n state,\n });\n return sa;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConnectionProfileOps.js","names":["_fs","_interopRequireDefault","require","_os","_path","_Constants","_Console","_DataProtection","_ExportImportUtils","_MiscUtils","_ServiceAccountOps","_JoseOps","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","error","done","Promise","then","_asyncToGenerator","fn","self","args","err","_default","state","getConnectionProfilesPath","findConnectionProfiles","connectionProfiles","host","initConnectionProfiles","getConnectionProfileByHost","getConnectionProfile","saveConnectionProfile","deleteConnectionProfile","addNewServiceAccount","exports","fileOptions","indentation","legacyProfileFilename","newProfileFilename","_ref","debugMessage","message","profilesPath","process","env","Constants","FRODO_CONNECTION_PROFILES_PATH_KEY","concat","os","homedir","_ref2","profiles","tenant","includes","foundProfile","migrateFromLegacyProfile","legacyPath","newPath","fs","existsSync","writeFileSync","JSON","stringify","copyFileSync","renameSync","_x","_initConnectionProfiles","_ref3","dataProtection","DataProtection","pathToMasterKey","getMasterKeyPath","filename","folderName","path","dirname","mkdirSync","recursive","data","readFileSync","connectionsData","parse","convert","conn","encodedPassword","encrypt","encodedLogApiSecret","encodedSvcacctJwk","_x2","_getConnectionProfileByHost","_ref4","printMessage","type","p","username","password","decrypt","logApiKey","logApiSecret","authenticationService","authenticationHeaderOverrides","svcacctName","svcacctId","svcacctJwk","_x3","_getConnectionProfile","_ref5","getHost","_x4","_saveConnectionProfile","_ref6","profile","statSync","found","setHost","verboseMessage","isValidUrl","getUsername","getPassword","getLogApiKey","getLogApiSecret","getServiceAccountId","getBearerToken","getServiceAccount","serviceAccountId","name","getServiceAccountJwk","getAuthenticationService","getAuthenticationHeaderOverrides","entries","orderedProfiles","sort","reduce","saveJsonToFile","includeMeta","_ref7","stat","code","_x5","_addNewServiceAccount","_ref8","Date","getTime","description","scope","jwkPrivate","createJwkRsa","jwkPublic","getJwkRsaPublic","jwks","createJwks","sa","createServiceAccount","accountStatus","scopes","_id","setServiceAccountId","setServiceAccountJwk"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { IdObjectSkeletonInterface } from '../api/ApiTypes';\nimport Constants from '../shared/Constants';\nimport { State } from '../shared/State';\nimport { debugMessage, printMessage, verboseMessage } from '../utils/Console';\nimport DataProtection from '../utils/DataProtection';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport { isValidUrl } from '../utils/MiscUtils';\nimport {\n createServiceAccount,\n getServiceAccount,\n} from './cloud/ServiceAccountOps';\nimport { createJwkRsa, createJwks, getJwkRsaPublic, JwkRsa } from './JoseOps';\n\nexport type ConnectionProfile = {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string;\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[];\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n initConnectionProfiles(): Promise<void>;\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 */\n getConnectionProfileByHost(host: string): Promise<ConnectionProfileInterface>;\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n getConnectionProfile(): Promise<ConnectionProfileInterface>;\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n saveConnectionProfile(host: string): Promise<boolean>;\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void;\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n addNewServiceAccount(): Promise<IdObjectSkeletonInterface>;\n};\n\nexport default (state: State): ConnectionProfile => {\n return {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string {\n return getConnectionProfilesPath({ state });\n },\n\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[] {\n return findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n });\n },\n\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n async initConnectionProfiles() {\n initConnectionProfiles({ state });\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 */\n async getConnectionProfileByHost(\n host: string\n ): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host, state });\n },\n\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n async getConnectionProfile(): Promise<ConnectionProfileInterface> {\n return getConnectionProfile({ state });\n },\n\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n async saveConnectionProfile(host: string): Promise<boolean> {\n return saveConnectionProfile({ host, state });\n },\n\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void {\n deleteConnectionProfile({ host, state });\n },\n\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n async addNewServiceAccount(): Promise<IdObjectSkeletonInterface> {\n return addNewServiceAccount({ state });\n },\n };\n};\n\nconst fileOptions = {\n indentation: 4,\n};\n\nexport interface SecureConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n encodedPassword?: string | null;\n logApiKey?: string | null;\n encodedLogApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n encodedSvcacctJwk?: string | null;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n password?: string | null;\n logApiKey?: string | null;\n logApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n svcacctJwk?: JwkRsa;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionsFileInterface {\n [key: string]: SecureConnectionProfileInterface;\n}\n\nconst legacyProfileFilename = '.frodorc';\nconst newProfileFilename = 'Connections.json';\n\n/**\n * Get connection profiles file name\n * @param {State} state library state\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath({ state }: { state: State }): string {\n debugMessage({\n message: `ConnectionProfileOps.getConnectionProfilesPath: start`,\n state,\n });\n const profilesPath =\n state.getConnectionProfilesPath() ||\n process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/${newProfileFilename}`;\n debugMessage({\n message: `ConnectionProfileOps.getConnectionProfilesPath: end [profilesPath=${profilesPath}]`,\n state,\n });\n return profilesPath;\n}\n\n/**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @param {State} state library state\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\nfunction findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n}: {\n connectionProfiles: ConnectionsFileInterface;\n host: string;\n state: State;\n}): SecureConnectionProfileInterface[] {\n const profiles: SecureConnectionProfileInterface[] = [];\n for (const tenant in connectionProfiles) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: tenant=${tenant}`,\n state,\n });\n if (tenant.includes(host)) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: '${host}' identifies '${tenant}', including in result set`,\n state,\n });\n const foundProfile = { ...connectionProfiles[tenant] };\n foundProfile.tenant = tenant;\n profiles.push(foundProfile);\n }\n }\n return profiles;\n}\n\n/**\n * Migrate from .frodorc to Connections.json\n */\nfunction migrateFromLegacyProfile() {\n const legacyPath = `${os.homedir()}/.frodo/${legacyProfileFilename}`;\n const newPath = `${os.homedir()}/.frodo/${newProfileFilename}`;\n if (!fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // no connections file (old or new), create empty new one\n fs.writeFileSync(\n newPath,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n } else if (fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // old exists, new one does not - so copy old to new one\n fs.copyFileSync(legacyPath, newPath);\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 // in other cases, where\n // (both old and new exist) OR (only new one exists) don't do anything\n}\n\n/**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n * @param {State} state library state\n */\nexport async function initConnectionProfiles({ state }: { state: State }) {\n debugMessage({\n message: `ConnectionProfileOps.initConnectionProfiles: start`,\n state,\n });\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath({ state });\n const folderName = path.dirname(filename);\n if (!fs.existsSync(filename)) {\n if (!fs.existsSync(folderName)) {\n debugMessage({\n message: `ConnectionProfileOps.initConnectionProfiles: folder does not exist: ${folderName}, creating...`,\n state,\n });\n fs.mkdirSync(folderName, { recursive: true });\n }\n if (!fs.existsSync(filename)) {\n debugMessage({\n message: `ConnectionProfileOps.initConnectionProfiles: file does not exist: ${filename}, creating...`,\n state,\n });\n fs.writeFileSync(\n filename,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n }\n }\n // encrypt the password and logApiSecret from clear text to aes-256-GCM\n else {\n migrateFromLegacyProfile();\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData: ConnectionsFileInterface = JSON.parse(data);\n let convert = false;\n for (const conn of Object.keys(connectionsData)) {\n if (connectionsData[conn]['password']) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn]['password']\n );\n delete connectionsData[conn]['password'];\n }\n if (connectionsData[conn]['logApiSecret']) {\n convert = true;\n connectionsData[conn].encodedLogApiSecret =\n await dataProtection.encrypt(connectionsData[conn]['logApiSecret']);\n delete connectionsData[conn]['logApiSecret'];\n }\n if (connectionsData[conn]['svcacctJwk']) {\n convert = true;\n connectionsData[conn].encodedSvcacctJwk = await dataProtection.encrypt(\n connectionsData[conn]['svcacctJwk']\n );\n delete connectionsData[conn]['svcacctJwk'];\n }\n }\n if (convert) {\n fs.writeFileSync(\n filename,\n JSON.stringify(connectionsData, null, fileOptions.indentation)\n );\n }\n }\n debugMessage({\n message: `ConnectionProfileOps.initConnectionProfiles: end`,\n state,\n });\n}\n\n/**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @param {State} state library state\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<ConnectionProfileInterface> {\n try {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 0) {\n printMessage({\n message: `Profile for ${host} not found. Please specify credentials on command line`,\n type: 'error',\n state,\n });\n return null;\n }\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\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 logApiKey: profiles[0].logApiKey ? profiles[0].logApiKey : null,\n logApiSecret: profiles[0].encodedLogApiSecret\n ? await dataProtection.decrypt(profiles[0].encodedLogApiSecret)\n : null,\n authenticationService: profiles[0].authenticationService\n ? profiles[0].authenticationService\n : null,\n authenticationHeaderOverrides: profiles[0].authenticationHeaderOverrides\n ? profiles[0].authenticationHeaderOverrides\n : {},\n svcacctName: profiles[0].svcacctName ? profiles[0].svcacctName : null,\n svcacctId: profiles[0].svcacctId ? profiles[0].svcacctId : null,\n svcacctJwk: profiles[0].encodedSvcacctJwk\n ? await dataProtection.decrypt(profiles[0].encodedSvcacctJwk)\n : null,\n };\n } catch (e) {\n printMessage({\n message: `Can not read saved connection info, please specify credentials on command line: ${e}`,\n type: 'error',\n state,\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 state,\n}: {\n state: State;\n}): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host: state.getHost(), state });\n}\n\n/**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\nexport async function saveConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<boolean> {\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: start`,\n state,\n });\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n debugMessage({ message: `Saving connection profile in ${filename}`, state });\n let profiles: ConnectionsFileInterface = {};\n let profile: SecureConnectionProfileInterface = { tenant: '' };\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n profiles = JSON.parse(data);\n\n // find tenant\n const found = findConnectionProfiles({\n connectionProfiles: profiles,\n host,\n state,\n });\n\n // replace tenant in session with real tenant url if necessary\n if (found.length === 1) {\n profile = found[0];\n state.setHost(profile.tenant);\n verboseMessage({ message: `Existing profile: ${profile.tenant}`, state });\n debugMessage({ message: profile, state });\n }\n\n // connection profile not found, validate host is a real URL\n if (found.length === 0) {\n if (isValidUrl(host)) {\n state.setHost(host);\n debugMessage({ message: `New profile: ${host}`, state });\n } else {\n printMessage({\n message: `No existing profile found matching '${host}'. Provide a valid URL as the host argument to create a new profile.`,\n type: 'error',\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [false]`,\n state,\n });\n return false;\n }\n }\n } catch (error) {\n debugMessage({\n message: `New profiles file ${filename} with new profile ${host}`,\n state,\n });\n }\n\n // user account\n if (state.getUsername()) profile.username = state.getUsername();\n if (state.getPassword())\n profile.encodedPassword = await dataProtection.encrypt(state.getPassword());\n\n // log API\n if (state.getLogApiKey()) profile.logApiKey = state.getLogApiKey();\n if (state.getLogApiSecret())\n profile.encodedLogApiSecret = await dataProtection.encrypt(\n state.getLogApiSecret()\n );\n\n // service account\n if (state.getServiceAccountId()) {\n profile.svcacctId = state.getServiceAccountId();\n if (state.getBearerToken()) {\n profile.svcacctName = (\n await getServiceAccount({\n serviceAccountId: state.getServiceAccountId(),\n state,\n })\n ).name;\n }\n }\n if (state.getServiceAccountJwk())\n profile.encodedSvcacctJwk = await dataProtection.encrypt(\n state.getServiceAccountJwk()\n );\n // update existing service account profile\n if (state.getBearerToken() && profile.svcacctId && !profile.svcacctName) {\n profile.svcacctName = (\n await getServiceAccount({ serviceAccountId: profile.svcacctId, state })\n ).name;\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: added missing service account name`,\n state,\n });\n }\n\n // advanced settings\n if (state.getAuthenticationService()) {\n profile.authenticationService = state.getAuthenticationService();\n printMessage({\n message:\n 'Advanced setting: Authentication Service: ' +\n state.getAuthenticationService(),\n type: 'info',\n state,\n });\n }\n if (\n state.getAuthenticationHeaderOverrides() &&\n Object.entries(state.getAuthenticationHeaderOverrides()).length\n ) {\n profile.authenticationHeaderOverrides =\n state.getAuthenticationHeaderOverrides();\n printMessage({\n message: 'Advanced setting: Authentication Header Overrides: ',\n type: 'info',\n state,\n });\n printMessage({\n message: state.getAuthenticationHeaderOverrides(),\n type: 'info',\n state,\n });\n }\n\n // remove the helper key 'tenant'\n delete profile.tenant;\n\n // update profiles\n profiles[state.getHost()] = profile;\n\n // sort profiles\n const orderedProfiles = Object.keys(profiles)\n .sort()\n .reduce((obj, key) => {\n obj[key] = profiles[key];\n return obj;\n }, {});\n\n // save profiles\n saveJsonToFile({\n data: orderedProfiles,\n filename,\n includeMeta: false,\n state,\n });\n verboseMessage({\n message: `Saved connection profile ${state.getHost()} in ${filename}`,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [true]`,\n state,\n });\n return true;\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}) {\n const filename = getConnectionProfilesPath({ state });\n let connectionsData: ConnectionsFileInterface = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 1) {\n delete connectionsData[profiles[0].tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n printMessage({\n message: `Deleted connection profile ${profiles[0].tenant}`,\n state,\n });\n } else {\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\n return null;\n } else {\n printMessage({\n message: `No connection profile ${host} found`,\n state,\n });\n }\n }\n } else if (err.code === 'ENOENT') {\n printMessage({\n message: `Connection profile file ${filename} not found`,\n state,\n });\n } else {\n printMessage({\n message: `Error in deleting connection profile: ${err.code}`,\n type: 'error',\n state,\n });\n }\n });\n}\n\n/**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function addNewServiceAccount({\n state,\n}: {\n state: State;\n}): Promise<IdObjectSkeletonInterface> {\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: start`,\n state,\n });\n const name = `Frodo-SA-${new Date().getTime()}`;\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: name=${name}...`,\n state,\n });\n const description = `${state.getUsername()}'s Frodo Service Account`;\n const scope = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwkPrivate = await createJwkRsa();\n const jwkPublic = await getJwkRsaPublic(jwkPrivate);\n const jwks = createJwks(jwkPublic);\n const sa = await createServiceAccount({\n name,\n description,\n accountStatus: 'Active',\n scopes: scope,\n jwks,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: id=${sa._id}`,\n state,\n });\n state.setServiceAccountId(sa._id);\n state.setServiceAccountJwk(jwkPrivate);\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: end`,\n state,\n });\n return sa;\n}\n"],"mappings":"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"}
@@ -109,7 +109,16 @@ const newProfileFilename = 'Connections.json';
109
109
  export function getConnectionProfilesPath({
110
110
  state
111
111
  }) {
112
- return state.getConnectionProfilesPath() || process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] || `${os.homedir()}/.frodo/${newProfileFilename}`;
112
+ debugMessage({
113
+ message: `ConnectionProfileOps.getConnectionProfilesPath: start`,
114
+ state
115
+ });
116
+ const profilesPath = state.getConnectionProfilesPath() || process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] || `${os.homedir()}/.frodo/${newProfileFilename}`;
117
+ debugMessage({
118
+ message: `ConnectionProfileOps.getConnectionProfilesPath: end [profilesPath=${profilesPath}]`,
119
+ state
120
+ });
121
+ return profilesPath;
113
122
  }
114
123
 
115
124
  /**
@@ -175,6 +184,10 @@ function migrateFromLegacyProfile() {
175
184
  export async function initConnectionProfiles({
176
185
  state
177
186
  }) {
187
+ debugMessage({
188
+ message: `ConnectionProfileOps.initConnectionProfiles: start`,
189
+ state
190
+ });
178
191
  const dataProtection = new DataProtection({
179
192
  pathToMasterKey: state.getMasterKeyPath(),
180
193
  state
@@ -184,11 +197,21 @@ export async function initConnectionProfiles({
184
197
  state
185
198
  });
186
199
  const folderName = path.dirname(filename);
187
- if (!fs.existsSync(folderName)) {
188
- fs.mkdirSync(folderName, {
189
- recursive: true
190
- });
200
+ if (!fs.existsSync(filename)) {
201
+ if (!fs.existsSync(folderName)) {
202
+ debugMessage({
203
+ message: `ConnectionProfileOps.initConnectionProfiles: folder does not exist: ${folderName}, creating...`,
204
+ state
205
+ });
206
+ fs.mkdirSync(folderName, {
207
+ recursive: true
208
+ });
209
+ }
191
210
  if (!fs.existsSync(filename)) {
211
+ debugMessage({
212
+ message: `ConnectionProfileOps.initConnectionProfiles: file does not exist: ${filename}, creating...`,
213
+ state
214
+ });
192
215
  fs.writeFileSync(filename, JSON.stringify({}, null, fileOptions.indentation));
193
216
  }
194
217
  }
@@ -219,6 +242,10 @@ export async function initConnectionProfiles({
219
242
  fs.writeFileSync(filename, JSON.stringify(connectionsData, null, fileOptions.indentation));
220
243
  }
221
244
  }
245
+ debugMessage({
246
+ message: `ConnectionProfileOps.initConnectionProfiles: end`,
247
+ state
248
+ });
222
249
  }
223
250
 
224
251
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionProfileOps.js","names":["fs","os","path","Constants","debugMessage","printMessage","verboseMessage","DataProtection","saveJsonToFile","isValidUrl","createServiceAccount","getServiceAccount","createJwkRsa","createJwks","getJwkRsaPublic","state","getConnectionProfilesPath","findConnectionProfiles","connectionProfiles","host","initConnectionProfiles","getConnectionProfileByHost","getConnectionProfile","saveConnectionProfile","deleteConnectionProfile","addNewServiceAccount","fileOptions","indentation","legacyProfileFilename","newProfileFilename","process","env","FRODO_CONNECTION_PROFILES_PATH_KEY","homedir","profiles","tenant","message","includes","foundProfile","push","migrateFromLegacyProfile","legacyPath","newPath","existsSync","writeFileSync","JSON","stringify","copyFileSync","renameSync","dataProtection","pathToMasterKey","getMasterKeyPath","filename","folderName","dirname","mkdirSync","recursive","data","readFileSync","connectionsData","parse","convert","conn","Object","keys","encodedPassword","encrypt","encodedLogApiSecret","encodedSvcacctJwk","length","type","forEach","p","username","password","decrypt","logApiKey","logApiSecret","authenticationService","authenticationHeaderOverrides","svcacctName","svcacctId","svcacctJwk","e","getHost","profile","statSync","found","setHost","error","getUsername","getPassword","getLogApiKey","getLogApiSecret","getServiceAccountId","getBearerToken","serviceAccountId","name","getServiceAccountJwk","getAuthenticationService","getAuthenticationHeaderOverrides","entries","orderedProfiles","sort","reduce","obj","key","includeMeta","stat","err","code","Date","getTime","description","scope","jwkPrivate","jwkPublic","jwks","sa","accountStatus","scopes","_id","setServiceAccountId","setServiceAccountJwk"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { IdObjectSkeletonInterface } from '../api/ApiTypes';\nimport Constants from '../shared/Constants';\nimport { State } from '../shared/State';\nimport { debugMessage, printMessage, verboseMessage } from '../utils/Console';\nimport DataProtection from '../utils/DataProtection';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport { isValidUrl } from '../utils/MiscUtils';\nimport {\n createServiceAccount,\n getServiceAccount,\n} from './cloud/ServiceAccountOps';\nimport { createJwkRsa, createJwks, getJwkRsaPublic, JwkRsa } from './JoseOps';\n\nexport type ConnectionProfile = {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string;\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[];\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n initConnectionProfiles(): Promise<void>;\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 */\n getConnectionProfileByHost(host: string): Promise<ConnectionProfileInterface>;\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n getConnectionProfile(): Promise<ConnectionProfileInterface>;\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n saveConnectionProfile(host: string): Promise<boolean>;\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void;\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n addNewServiceAccount(): Promise<IdObjectSkeletonInterface>;\n};\n\nexport default (state: State): ConnectionProfile => {\n return {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string {\n return getConnectionProfilesPath({ state });\n },\n\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[] {\n return findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n });\n },\n\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n async initConnectionProfiles() {\n initConnectionProfiles({ state });\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 */\n async getConnectionProfileByHost(\n host: string\n ): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host, state });\n },\n\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n async getConnectionProfile(): Promise<ConnectionProfileInterface> {\n return getConnectionProfile({ state });\n },\n\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n async saveConnectionProfile(host: string): Promise<boolean> {\n return saveConnectionProfile({ host, state });\n },\n\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void {\n deleteConnectionProfile({ host, state });\n },\n\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n async addNewServiceAccount(): Promise<IdObjectSkeletonInterface> {\n return addNewServiceAccount({ state });\n },\n };\n};\n\nconst fileOptions = {\n indentation: 4,\n};\n\nexport interface SecureConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n encodedPassword?: string | null;\n logApiKey?: string | null;\n encodedLogApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n encodedSvcacctJwk?: string | null;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n password?: string | null;\n logApiKey?: string | null;\n logApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n svcacctJwk?: JwkRsa;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionsFileInterface {\n [key: string]: SecureConnectionProfileInterface;\n}\n\nconst legacyProfileFilename = '.frodorc';\nconst newProfileFilename = 'Connections.json';\n\n/**\n * Get connection profiles file name\n * @param {State} state library state\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath({ state }: { state: State }): string {\n return (\n state.getConnectionProfilesPath() ||\n process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/${newProfileFilename}`\n );\n}\n\n/**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @param {State} state library state\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\nfunction findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n}: {\n connectionProfiles: ConnectionsFileInterface;\n host: string;\n state: State;\n}): SecureConnectionProfileInterface[] {\n const profiles: SecureConnectionProfileInterface[] = [];\n for (const tenant in connectionProfiles) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: tenant=${tenant}`,\n state,\n });\n if (tenant.includes(host)) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: '${host}' identifies '${tenant}', including in result set`,\n state,\n });\n const foundProfile = { ...connectionProfiles[tenant] };\n foundProfile.tenant = tenant;\n profiles.push(foundProfile);\n }\n }\n return profiles;\n}\n\n/**\n * Migrate from .frodorc to Connections.json\n */\nfunction migrateFromLegacyProfile() {\n const legacyPath = `${os.homedir()}/.frodo/${legacyProfileFilename}`;\n const newPath = `${os.homedir()}/.frodo/${newProfileFilename}`;\n if (!fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // no connections file (old or new), create empty new one\n fs.writeFileSync(\n newPath,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n } else if (fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // old exists, new one does not - so copy old to new one\n fs.copyFileSync(legacyPath, newPath);\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 // in other cases, where\n // (both old and new exist) OR (only new one exists) don't do anything\n}\n\n/**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n * @param {State} state library state\n */\nexport async function initConnectionProfiles({ state }: { state: State }) {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath({ state });\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 and logApiSecret from clear text to aes-256-GCM\n else {\n migrateFromLegacyProfile();\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData: ConnectionsFileInterface = JSON.parse(data);\n let convert = false;\n for (const conn of Object.keys(connectionsData)) {\n if (connectionsData[conn]['password']) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn]['password']\n );\n delete connectionsData[conn]['password'];\n }\n if (connectionsData[conn]['logApiSecret']) {\n convert = true;\n connectionsData[conn].encodedLogApiSecret =\n await dataProtection.encrypt(connectionsData[conn]['logApiSecret']);\n delete connectionsData[conn]['logApiSecret'];\n }\n if (connectionsData[conn]['svcacctJwk']) {\n convert = true;\n connectionsData[conn].encodedSvcacctJwk = await dataProtection.encrypt(\n connectionsData[conn]['svcacctJwk']\n );\n delete connectionsData[conn]['svcacctJwk'];\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 * @param {State} state library state\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<ConnectionProfileInterface> {\n try {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 0) {\n printMessage({\n message: `Profile for ${host} not found. Please specify credentials on command line`,\n type: 'error',\n state,\n });\n return null;\n }\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\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 logApiKey: profiles[0].logApiKey ? profiles[0].logApiKey : null,\n logApiSecret: profiles[0].encodedLogApiSecret\n ? await dataProtection.decrypt(profiles[0].encodedLogApiSecret)\n : null,\n authenticationService: profiles[0].authenticationService\n ? profiles[0].authenticationService\n : null,\n authenticationHeaderOverrides: profiles[0].authenticationHeaderOverrides\n ? profiles[0].authenticationHeaderOverrides\n : {},\n svcacctName: profiles[0].svcacctName ? profiles[0].svcacctName : null,\n svcacctId: profiles[0].svcacctId ? profiles[0].svcacctId : null,\n svcacctJwk: profiles[0].encodedSvcacctJwk\n ? await dataProtection.decrypt(profiles[0].encodedSvcacctJwk)\n : null,\n };\n } catch (e) {\n printMessage({\n message: `Can not read saved connection info, please specify credentials on command line: ${e}`,\n type: 'error',\n state,\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 state,\n}: {\n state: State;\n}): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host: state.getHost(), state });\n}\n\n/**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\nexport async function saveConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<boolean> {\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: start`,\n state,\n });\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n debugMessage({ message: `Saving connection profile in ${filename}`, state });\n let profiles: ConnectionsFileInterface = {};\n let profile: SecureConnectionProfileInterface = { tenant: '' };\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n profiles = JSON.parse(data);\n\n // find tenant\n const found = findConnectionProfiles({\n connectionProfiles: profiles,\n host,\n state,\n });\n\n // replace tenant in session with real tenant url if necessary\n if (found.length === 1) {\n profile = found[0];\n state.setHost(profile.tenant);\n verboseMessage({ message: `Existing profile: ${profile.tenant}`, state });\n debugMessage({ message: profile, state });\n }\n\n // connection profile not found, validate host is a real URL\n if (found.length === 0) {\n if (isValidUrl(host)) {\n state.setHost(host);\n debugMessage({ message: `New profile: ${host}`, state });\n } else {\n printMessage({\n message: `No existing profile found matching '${host}'. Provide a valid URL as the host argument to create a new profile.`,\n type: 'error',\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [false]`,\n state,\n });\n return false;\n }\n }\n } catch (error) {\n debugMessage({\n message: `New profiles file ${filename} with new profile ${host}`,\n state,\n });\n }\n\n // user account\n if (state.getUsername()) profile.username = state.getUsername();\n if (state.getPassword())\n profile.encodedPassword = await dataProtection.encrypt(state.getPassword());\n\n // log API\n if (state.getLogApiKey()) profile.logApiKey = state.getLogApiKey();\n if (state.getLogApiSecret())\n profile.encodedLogApiSecret = await dataProtection.encrypt(\n state.getLogApiSecret()\n );\n\n // service account\n if (state.getServiceAccountId()) {\n profile.svcacctId = state.getServiceAccountId();\n if (state.getBearerToken()) {\n profile.svcacctName = (\n await getServiceAccount({\n serviceAccountId: state.getServiceAccountId(),\n state,\n })\n ).name;\n }\n }\n if (state.getServiceAccountJwk())\n profile.encodedSvcacctJwk = await dataProtection.encrypt(\n state.getServiceAccountJwk()\n );\n // update existing service account profile\n if (state.getBearerToken() && profile.svcacctId && !profile.svcacctName) {\n profile.svcacctName = (\n await getServiceAccount({ serviceAccountId: profile.svcacctId, state })\n ).name;\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: added missing service account name`,\n state,\n });\n }\n\n // advanced settings\n if (state.getAuthenticationService()) {\n profile.authenticationService = state.getAuthenticationService();\n printMessage({\n message:\n 'Advanced setting: Authentication Service: ' +\n state.getAuthenticationService(),\n type: 'info',\n state,\n });\n }\n if (\n state.getAuthenticationHeaderOverrides() &&\n Object.entries(state.getAuthenticationHeaderOverrides()).length\n ) {\n profile.authenticationHeaderOverrides =\n state.getAuthenticationHeaderOverrides();\n printMessage({\n message: 'Advanced setting: Authentication Header Overrides: ',\n type: 'info',\n state,\n });\n printMessage({\n message: state.getAuthenticationHeaderOverrides(),\n type: 'info',\n state,\n });\n }\n\n // remove the helper key 'tenant'\n delete profile.tenant;\n\n // update profiles\n profiles[state.getHost()] = profile;\n\n // sort profiles\n const orderedProfiles = Object.keys(profiles)\n .sort()\n .reduce((obj, key) => {\n obj[key] = profiles[key];\n return obj;\n }, {});\n\n // save profiles\n saveJsonToFile({\n data: orderedProfiles,\n filename,\n includeMeta: false,\n state,\n });\n verboseMessage({\n message: `Saved connection profile ${state.getHost()} in ${filename}`,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [true]`,\n state,\n });\n return true;\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}) {\n const filename = getConnectionProfilesPath({ state });\n let connectionsData: ConnectionsFileInterface = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 1) {\n delete connectionsData[profiles[0].tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n printMessage({\n message: `Deleted connection profile ${profiles[0].tenant}`,\n state,\n });\n } else {\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\n return null;\n } else {\n printMessage({\n message: `No connection profile ${host} found`,\n state,\n });\n }\n }\n } else if (err.code === 'ENOENT') {\n printMessage({\n message: `Connection profile file ${filename} not found`,\n state,\n });\n } else {\n printMessage({\n message: `Error in deleting connection profile: ${err.code}`,\n type: 'error',\n state,\n });\n }\n });\n}\n\n/**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function addNewServiceAccount({\n state,\n}: {\n state: State;\n}): Promise<IdObjectSkeletonInterface> {\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: start`,\n state,\n });\n const name = `Frodo-SA-${new Date().getTime()}`;\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: name=${name}...`,\n state,\n });\n const description = `${state.getUsername()}'s Frodo Service Account`;\n const scope = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwkPrivate = await createJwkRsa();\n const jwkPublic = await getJwkRsaPublic(jwkPrivate);\n const jwks = createJwks(jwkPublic);\n const sa = await createServiceAccount({\n name,\n description,\n accountStatus: 'Active',\n scopes: scope,\n jwks,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: id=${sa._id}`,\n state,\n });\n state.setServiceAccountId(sa._id);\n state.setServiceAccountJwk(jwkPrivate);\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: end`,\n state,\n });\n return sa;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConnectionProfileOps.js","names":["fs","os","path","Constants","debugMessage","printMessage","verboseMessage","DataProtection","saveJsonToFile","isValidUrl","createServiceAccount","getServiceAccount","createJwkRsa","createJwks","getJwkRsaPublic","state","getConnectionProfilesPath","findConnectionProfiles","connectionProfiles","host","initConnectionProfiles","getConnectionProfileByHost","getConnectionProfile","saveConnectionProfile","deleteConnectionProfile","addNewServiceAccount","fileOptions","indentation","legacyProfileFilename","newProfileFilename","message","profilesPath","process","env","FRODO_CONNECTION_PROFILES_PATH_KEY","homedir","profiles","tenant","includes","foundProfile","push","migrateFromLegacyProfile","legacyPath","newPath","existsSync","writeFileSync","JSON","stringify","copyFileSync","renameSync","dataProtection","pathToMasterKey","getMasterKeyPath","filename","folderName","dirname","mkdirSync","recursive","data","readFileSync","connectionsData","parse","convert","conn","Object","keys","encodedPassword","encrypt","encodedLogApiSecret","encodedSvcacctJwk","length","type","forEach","p","username","password","decrypt","logApiKey","logApiSecret","authenticationService","authenticationHeaderOverrides","svcacctName","svcacctId","svcacctJwk","e","getHost","profile","statSync","found","setHost","error","getUsername","getPassword","getLogApiKey","getLogApiSecret","getServiceAccountId","getBearerToken","serviceAccountId","name","getServiceAccountJwk","getAuthenticationService","getAuthenticationHeaderOverrides","entries","orderedProfiles","sort","reduce","obj","key","includeMeta","stat","err","code","Date","getTime","description","scope","jwkPrivate","jwkPublic","jwks","sa","accountStatus","scopes","_id","setServiceAccountId","setServiceAccountJwk"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { IdObjectSkeletonInterface } from '../api/ApiTypes';\nimport Constants from '../shared/Constants';\nimport { State } from '../shared/State';\nimport { debugMessage, printMessage, verboseMessage } from '../utils/Console';\nimport DataProtection from '../utils/DataProtection';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport { isValidUrl } from '../utils/MiscUtils';\nimport {\n createServiceAccount,\n getServiceAccount,\n} from './cloud/ServiceAccountOps';\nimport { createJwkRsa, createJwks, getJwkRsaPublic, JwkRsa } from './JoseOps';\n\nexport type ConnectionProfile = {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string;\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[];\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n initConnectionProfiles(): Promise<void>;\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 */\n getConnectionProfileByHost(host: string): Promise<ConnectionProfileInterface>;\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n getConnectionProfile(): Promise<ConnectionProfileInterface>;\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n saveConnectionProfile(host: string): Promise<boolean>;\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void;\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n addNewServiceAccount(): Promise<IdObjectSkeletonInterface>;\n};\n\nexport default (state: State): ConnectionProfile => {\n return {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string {\n return getConnectionProfilesPath({ state });\n },\n\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[] {\n return findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n });\n },\n\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n async initConnectionProfiles() {\n initConnectionProfiles({ state });\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 */\n async getConnectionProfileByHost(\n host: string\n ): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host, state });\n },\n\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n async getConnectionProfile(): Promise<ConnectionProfileInterface> {\n return getConnectionProfile({ state });\n },\n\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n async saveConnectionProfile(host: string): Promise<boolean> {\n return saveConnectionProfile({ host, state });\n },\n\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void {\n deleteConnectionProfile({ host, state });\n },\n\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n async addNewServiceAccount(): Promise<IdObjectSkeletonInterface> {\n return addNewServiceAccount({ state });\n },\n };\n};\n\nconst fileOptions = {\n indentation: 4,\n};\n\nexport interface SecureConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n encodedPassword?: string | null;\n logApiKey?: string | null;\n encodedLogApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n encodedSvcacctJwk?: string | null;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n password?: string | null;\n logApiKey?: string | null;\n logApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n svcacctJwk?: JwkRsa;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionsFileInterface {\n [key: string]: SecureConnectionProfileInterface;\n}\n\nconst legacyProfileFilename = '.frodorc';\nconst newProfileFilename = 'Connections.json';\n\n/**\n * Get connection profiles file name\n * @param {State} state library state\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath({ state }: { state: State }): string {\n debugMessage({\n message: `ConnectionProfileOps.getConnectionProfilesPath: start`,\n state,\n });\n const profilesPath =\n state.getConnectionProfilesPath() ||\n process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/${newProfileFilename}`;\n debugMessage({\n message: `ConnectionProfileOps.getConnectionProfilesPath: end [profilesPath=${profilesPath}]`,\n state,\n });\n return profilesPath;\n}\n\n/**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @param {State} state library state\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\nfunction findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n}: {\n connectionProfiles: ConnectionsFileInterface;\n host: string;\n state: State;\n}): SecureConnectionProfileInterface[] {\n const profiles: SecureConnectionProfileInterface[] = [];\n for (const tenant in connectionProfiles) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: tenant=${tenant}`,\n state,\n });\n if (tenant.includes(host)) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: '${host}' identifies '${tenant}', including in result set`,\n state,\n });\n const foundProfile = { ...connectionProfiles[tenant] };\n foundProfile.tenant = tenant;\n profiles.push(foundProfile);\n }\n }\n return profiles;\n}\n\n/**\n * Migrate from .frodorc to Connections.json\n */\nfunction migrateFromLegacyProfile() {\n const legacyPath = `${os.homedir()}/.frodo/${legacyProfileFilename}`;\n const newPath = `${os.homedir()}/.frodo/${newProfileFilename}`;\n if (!fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // no connections file (old or new), create empty new one\n fs.writeFileSync(\n newPath,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n } else if (fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // old exists, new one does not - so copy old to new one\n fs.copyFileSync(legacyPath, newPath);\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 // in other cases, where\n // (both old and new exist) OR (only new one exists) don't do anything\n}\n\n/**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n * @param {State} state library state\n */\nexport async function initConnectionProfiles({ state }: { state: State }) {\n debugMessage({\n message: `ConnectionProfileOps.initConnectionProfiles: start`,\n state,\n });\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath({ state });\n const folderName = path.dirname(filename);\n if (!fs.existsSync(filename)) {\n if (!fs.existsSync(folderName)) {\n debugMessage({\n message: `ConnectionProfileOps.initConnectionProfiles: folder does not exist: ${folderName}, creating...`,\n state,\n });\n fs.mkdirSync(folderName, { recursive: true });\n }\n if (!fs.existsSync(filename)) {\n debugMessage({\n message: `ConnectionProfileOps.initConnectionProfiles: file does not exist: ${filename}, creating...`,\n state,\n });\n fs.writeFileSync(\n filename,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n }\n }\n // encrypt the password and logApiSecret from clear text to aes-256-GCM\n else {\n migrateFromLegacyProfile();\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData: ConnectionsFileInterface = JSON.parse(data);\n let convert = false;\n for (const conn of Object.keys(connectionsData)) {\n if (connectionsData[conn]['password']) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn]['password']\n );\n delete connectionsData[conn]['password'];\n }\n if (connectionsData[conn]['logApiSecret']) {\n convert = true;\n connectionsData[conn].encodedLogApiSecret =\n await dataProtection.encrypt(connectionsData[conn]['logApiSecret']);\n delete connectionsData[conn]['logApiSecret'];\n }\n if (connectionsData[conn]['svcacctJwk']) {\n convert = true;\n connectionsData[conn].encodedSvcacctJwk = await dataProtection.encrypt(\n connectionsData[conn]['svcacctJwk']\n );\n delete connectionsData[conn]['svcacctJwk'];\n }\n }\n if (convert) {\n fs.writeFileSync(\n filename,\n JSON.stringify(connectionsData, null, fileOptions.indentation)\n );\n }\n }\n debugMessage({\n message: `ConnectionProfileOps.initConnectionProfiles: end`,\n state,\n });\n}\n\n/**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @param {State} state library state\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<ConnectionProfileInterface> {\n try {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 0) {\n printMessage({\n message: `Profile for ${host} not found. Please specify credentials on command line`,\n type: 'error',\n state,\n });\n return null;\n }\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\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 logApiKey: profiles[0].logApiKey ? profiles[0].logApiKey : null,\n logApiSecret: profiles[0].encodedLogApiSecret\n ? await dataProtection.decrypt(profiles[0].encodedLogApiSecret)\n : null,\n authenticationService: profiles[0].authenticationService\n ? profiles[0].authenticationService\n : null,\n authenticationHeaderOverrides: profiles[0].authenticationHeaderOverrides\n ? profiles[0].authenticationHeaderOverrides\n : {},\n svcacctName: profiles[0].svcacctName ? profiles[0].svcacctName : null,\n svcacctId: profiles[0].svcacctId ? profiles[0].svcacctId : null,\n svcacctJwk: profiles[0].encodedSvcacctJwk\n ? await dataProtection.decrypt(profiles[0].encodedSvcacctJwk)\n : null,\n };\n } catch (e) {\n printMessage({\n message: `Can not read saved connection info, please specify credentials on command line: ${e}`,\n type: 'error',\n state,\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 state,\n}: {\n state: State;\n}): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host: state.getHost(), state });\n}\n\n/**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\nexport async function saveConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<boolean> {\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: start`,\n state,\n });\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n debugMessage({ message: `Saving connection profile in ${filename}`, state });\n let profiles: ConnectionsFileInterface = {};\n let profile: SecureConnectionProfileInterface = { tenant: '' };\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n profiles = JSON.parse(data);\n\n // find tenant\n const found = findConnectionProfiles({\n connectionProfiles: profiles,\n host,\n state,\n });\n\n // replace tenant in session with real tenant url if necessary\n if (found.length === 1) {\n profile = found[0];\n state.setHost(profile.tenant);\n verboseMessage({ message: `Existing profile: ${profile.tenant}`, state });\n debugMessage({ message: profile, state });\n }\n\n // connection profile not found, validate host is a real URL\n if (found.length === 0) {\n if (isValidUrl(host)) {\n state.setHost(host);\n debugMessage({ message: `New profile: ${host}`, state });\n } else {\n printMessage({\n message: `No existing profile found matching '${host}'. Provide a valid URL as the host argument to create a new profile.`,\n type: 'error',\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [false]`,\n state,\n });\n return false;\n }\n }\n } catch (error) {\n debugMessage({\n message: `New profiles file ${filename} with new profile ${host}`,\n state,\n });\n }\n\n // user account\n if (state.getUsername()) profile.username = state.getUsername();\n if (state.getPassword())\n profile.encodedPassword = await dataProtection.encrypt(state.getPassword());\n\n // log API\n if (state.getLogApiKey()) profile.logApiKey = state.getLogApiKey();\n if (state.getLogApiSecret())\n profile.encodedLogApiSecret = await dataProtection.encrypt(\n state.getLogApiSecret()\n );\n\n // service account\n if (state.getServiceAccountId()) {\n profile.svcacctId = state.getServiceAccountId();\n if (state.getBearerToken()) {\n profile.svcacctName = (\n await getServiceAccount({\n serviceAccountId: state.getServiceAccountId(),\n state,\n })\n ).name;\n }\n }\n if (state.getServiceAccountJwk())\n profile.encodedSvcacctJwk = await dataProtection.encrypt(\n state.getServiceAccountJwk()\n );\n // update existing service account profile\n if (state.getBearerToken() && profile.svcacctId && !profile.svcacctName) {\n profile.svcacctName = (\n await getServiceAccount({ serviceAccountId: profile.svcacctId, state })\n ).name;\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: added missing service account name`,\n state,\n });\n }\n\n // advanced settings\n if (state.getAuthenticationService()) {\n profile.authenticationService = state.getAuthenticationService();\n printMessage({\n message:\n 'Advanced setting: Authentication Service: ' +\n state.getAuthenticationService(),\n type: 'info',\n state,\n });\n }\n if (\n state.getAuthenticationHeaderOverrides() &&\n Object.entries(state.getAuthenticationHeaderOverrides()).length\n ) {\n profile.authenticationHeaderOverrides =\n state.getAuthenticationHeaderOverrides();\n printMessage({\n message: 'Advanced setting: Authentication Header Overrides: ',\n type: 'info',\n state,\n });\n printMessage({\n message: state.getAuthenticationHeaderOverrides(),\n type: 'info',\n state,\n });\n }\n\n // remove the helper key 'tenant'\n delete profile.tenant;\n\n // update profiles\n profiles[state.getHost()] = profile;\n\n // sort profiles\n const orderedProfiles = Object.keys(profiles)\n .sort()\n .reduce((obj, key) => {\n obj[key] = profiles[key];\n return obj;\n }, {});\n\n // save profiles\n saveJsonToFile({\n data: orderedProfiles,\n filename,\n includeMeta: false,\n state,\n });\n verboseMessage({\n message: `Saved connection profile ${state.getHost()} in ${filename}`,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [true]`,\n state,\n });\n return true;\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}) {\n const filename = getConnectionProfilesPath({ state });\n let connectionsData: ConnectionsFileInterface = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 1) {\n delete connectionsData[profiles[0].tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n printMessage({\n message: `Deleted connection profile ${profiles[0].tenant}`,\n state,\n });\n } else {\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\n return null;\n } else {\n printMessage({\n message: `No connection profile ${host} found`,\n state,\n });\n }\n }\n } else if (err.code === 'ENOENT') {\n printMessage({\n message: `Connection profile file ${filename} not found`,\n state,\n });\n } else {\n printMessage({\n message: `Error in deleting connection profile: ${err.code}`,\n type: 'error',\n state,\n });\n }\n });\n}\n\n/**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function addNewServiceAccount({\n state,\n}: {\n state: State;\n}): Promise<IdObjectSkeletonInterface> {\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: start`,\n state,\n });\n const name = `Frodo-SA-${new Date().getTime()}`;\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: name=${name}...`,\n state,\n });\n const description = `${state.getUsername()}'s Frodo Service Account`;\n const scope = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwkPrivate = await createJwkRsa();\n const jwkPublic = await getJwkRsaPublic(jwkPrivate);\n const jwks = createJwks(jwkPublic);\n const sa = await createServiceAccount({\n name,\n description,\n accountStatus: 'Active',\n scopes: scope,\n jwks,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: id=${sa._id}`,\n state,\n });\n state.setServiceAccountId(sa._id);\n state.setServiceAccountJwk(jwkPrivate);\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: end`,\n state,\n });\n return sa;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-lib",
3
- "version": "2.0.0-29",
3
+ "version": "2.0.0-30",
4
4
  "type": "commonjs",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionProfileOps.d.ts","sourceRoot":"","sources":["../../src/ops/ConnectionProfileOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConnectionProfileOps.d.ts","sourceRoot":"","sources":["../../src/ops/ConnectionProfileOps.ts"],"names":[],"mappings":"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"}