@rockcarver/frodo-lib 0.18.5 → 0.18.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceOps.js","names":["createServiceExportTemplate","meta","service","getListOfServices","globalConfig","debugMessage","services","_getListOfServices","result","getFullServices","serviceList","fullServiceData","Promise","all","map","listItem","nextDescendents","getService","_id","getServiceDescendents","error","response","status","data","message","printMessage","filter","putFullService","serviceId","clean","_rev","enabled","deleteFullService","putService","length","descendent","type","_type","descendentId","undefined","putServiceNextDescendent","putFullServices","serviceEntries","results","id","push","detail","JSON","stringify","serviceNextDescendentData","nextDescendent","deleteServiceNextDescendent","deleteService","deleteFullServices","serviceListItem","exportService","exportData","exportServices","importService","importData","serviceData","importServices","Object","entries"],"sources":["ops/ServiceOps.ts"],"sourcesContent":["import { AmServiceSkeleton } from '../api/ApiTypes';\nimport {\n deleteService,\n deleteServiceNextDescendent,\n getService,\n getListOfServices as _getListOfServices,\n getServiceDescendents,\n putService,\n putServiceNextDescendent,\n ServiceNextDescendent,\n} from '../api/ServiceApi';\nimport { ServiceExportInterface } from './OpsTypes';\nimport { debugMessage, printMessage } from './utils/Console';\n\ninterface FullService extends AmServiceSkeleton {\n nextDescendents?: ServiceNextDescendent[];\n}\n\n/**\n * Create an empty service export template\n * @returns {SingleTreeExportInterface} an empty service export template\n */\nexport function createServiceExportTemplate(): ServiceExportInterface {\n return {\n meta: {},\n service: {},\n } as ServiceExportInterface;\n}\n\n/**\n * Get list of services\n * @param {boolean} globalConfig true if the list of global services is requested, false otherwise. Default: false.\n */\nexport async function getListOfServices(globalConfig = false) {\n debugMessage(`ServiceOps.getListOfServices: start`);\n const services = (await _getListOfServices(globalConfig)).result;\n debugMessage(`ServiceOps.getListOfServices: end`);\n return services;\n}\n\n/**\n * Get all services including their descendents.\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns Promise resolving to an array of services with their descendants\n */\nexport async function getFullServices(\n globalConfig = false\n): Promise<FullService[]> {\n debugMessage(\n `ServiceOps.getFullServices: start, globalConfig=${globalConfig}`\n );\n const serviceList = (await _getListOfServices(globalConfig)).result;\n\n const fullServiceData = await Promise.all(\n serviceList.map(async (listItem) => {\n try {\n const [service, nextDescendents] = await Promise.all([\n getService(listItem._id, globalConfig),\n getServiceDescendents(listItem._id, globalConfig),\n ]);\n\n return {\n ...service,\n nextDescendents,\n };\n } catch (error) {\n if (\n !(\n error.response?.status === 403 &&\n error.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n )\n ) {\n const message = error.response?.data?.message;\n printMessage(\n `Unable to retrieve data for ${listItem._id} with error: ${message}`,\n 'error'\n );\n }\n }\n })\n );\n\n debugMessage(`ServiceOps.getFullServices: end`);\n return fullServiceData.filter((data) => !!data); // make sure to filter out any undefined objects\n}\n\n/**\n * Saves a service using the provide id and data, including descendents\n * @param {string} serviceId the service id / name\n * @param {string} fullServiceData service object including descendants\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns promise resolving to a service object\n */\nasync function putFullService(\n serviceId: string,\n fullServiceData: FullService,\n clean: boolean,\n globalConfig = false\n): Promise<AmServiceSkeleton> {\n debugMessage(\n `ServiceOps.putFullService: start, serviceId=${serviceId}, globalConfig=${globalConfig}`\n );\n const nextDescendents = fullServiceData.nextDescendents;\n\n delete fullServiceData.nextDescendents;\n delete fullServiceData._rev;\n delete fullServiceData.enabled;\n\n if (clean) {\n try {\n debugMessage(`ServiceOps.putFullService: clean`);\n await deleteFullService(serviceId, globalConfig);\n } catch (error) {\n if (\n !(\n error.response?.status === 404 &&\n error.response?.data?.message === 'Not Found'\n )\n ) {\n const message = error.response?.data?.message;\n printMessage(\n `Error deleting service '${serviceId}' before import: ${message}`,\n 'error'\n );\n }\n }\n }\n\n // create service first\n const result = await putService(serviceId, fullServiceData, globalConfig);\n\n // return fast if no next descendents supplied\n if (nextDescendents.length === 0) {\n debugMessage(`ServiceOps.putFullService: end (w/o descendents)`);\n return result;\n }\n\n // now create next descendents\n await Promise.all(\n nextDescendents.map(async (descendent) => {\n const type = descendent._type._id;\n const descendentId = descendent._id;\n debugMessage(`ServiceOps.putFullService: descendentId=${descendentId}`);\n let result = undefined;\n try {\n result = await putServiceNextDescendent(\n serviceId,\n type,\n descendentId,\n descendent,\n globalConfig\n );\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(\n `Put descendent '${descendentId}' of service '${serviceId}': ${message}`,\n 'error'\n );\n }\n return result;\n })\n );\n debugMessage(`ServiceOps.putFullService: end (w/ descendents)`);\n}\n\n/**\n * Saves multiple services using the serviceEntries which contain both id and data with descendants\n * @param {[string, FullService][]} serviceEntries The services to add\n * @param {boolean} clean Indicates whether to remove possible existing services first\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns {Promise<AmService[]>} promise resolving to an array of service objects\n */\nasync function putFullServices(\n serviceEntries: [string, FullService][],\n clean: boolean,\n globalConfig = false\n): Promise<AmServiceSkeleton[]> {\n debugMessage(\n `ServiceOps.putFullServices: start, globalConfig=${globalConfig}`\n );\n const results: AmServiceSkeleton[] = [];\n for (const [id, data] of serviceEntries) {\n try {\n const result = await putFullService(id, data, clean, globalConfig);\n results.push(result);\n printMessage(`Imported: ${id}`, 'info');\n } catch (error) {\n const message = error.response?.data?.message;\n const detail = error.response?.data?.detail;\n printMessage(`Import service '${id}': ${message}`, 'error');\n if (detail) {\n printMessage(`Details: ${JSON.stringify(detail)}`, 'error');\n }\n }\n }\n debugMessage(`ServiceOps.putFullServices: end`);\n return results;\n}\n\n/**\n * Deletes the specified service\n * @param {string} serviceId The service to delete\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n */\nexport async function deleteFullService(\n serviceId: string,\n globalConfig = false\n) {\n debugMessage(\n `ServiceOps.deleteFullService: start, globalConfig=${globalConfig}`\n );\n const serviceNextDescendentData = await getServiceDescendents(\n serviceId,\n globalConfig\n );\n\n await Promise.all(\n serviceNextDescendentData.map((nextDescendent) =>\n deleteServiceNextDescendent(\n serviceId,\n nextDescendent._type._id,\n nextDescendent._id,\n globalConfig\n )\n )\n );\n\n await deleteService(serviceId, globalConfig);\n debugMessage(`ServiceOps.deleteFullService: end`);\n}\n\n/**\n * Deletes all services\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n */\nexport async function deleteFullServices(globalConfig = false) {\n debugMessage(\n `ServiceOps.deleteFullServices: start, globalConfig=${globalConfig}`\n );\n try {\n const serviceList = (await _getListOfServices(globalConfig)).result;\n\n await Promise.all(\n serviceList.map(async (serviceListItem) => {\n try {\n await deleteFullService(serviceListItem._id, globalConfig);\n } catch (error) {\n if (\n !(\n error.response?.status === 403 &&\n error.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n )\n ) {\n const message = error.response?.data?.message;\n printMessage(\n `Delete service '${serviceListItem._id}': ${message}`,\n 'error'\n );\n }\n }\n })\n );\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Delete services: ${message}`, 'error');\n }\n debugMessage(`ServiceOps.deleteFullServices: end`);\n}\n\n/**\n * Export service. The response can be saved to file as is.\n * @param serviceId service id/name\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns {Promise<ServiceExportInterface>} Promise resolving to a ServiceExportInterface object.\n */\nexport async function exportService(\n serviceId: string,\n globalConfig = false\n): Promise<ServiceExportInterface> {\n debugMessage(`ServiceOps.exportService: start, globalConfig=${globalConfig}`);\n const exportData = createServiceExportTemplate();\n try {\n const service = await getService(serviceId, globalConfig);\n service.nextDescendents = await getServiceDescendents(\n serviceId,\n globalConfig\n );\n exportData.service[serviceId] = service;\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Export service '${serviceId}': ${message}`, 'error');\n }\n debugMessage(`ServiceOps.exportService: end`);\n return exportData;\n}\n\n/**\n * Export all services\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n */\nexport async function exportServices(\n globalConfig = false\n): Promise<ServiceExportInterface> {\n debugMessage(\n `ServiceOps.exportServices: start, globalConfig=${globalConfig}`\n );\n const exportData = createServiceExportTemplate();\n try {\n const services = await getFullServices(globalConfig);\n for (const service of services) {\n exportData.service[service._type._id] = service;\n }\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Export servics: ${message}`, 'error');\n }\n debugMessage(`ServiceOps.exportServices: end`);\n return exportData;\n}\n\n/**\n * Imports a single service using a reference to the service and a file to read the data from. Optionally clean (remove) an existing service first\n * @param {string} serviceId The service id/name to add\n * @param {ServiceExportInterface} importData The service configuration export data to import\n * @param {boolean} clean Indicates whether to remove a possible existing service with the same id first.\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns Promise resolving when the service has been imported\n */\nexport async function importService(\n serviceId: string,\n importData: ServiceExportInterface,\n clean: boolean,\n globalConfig = false\n): Promise<AmServiceSkeleton> {\n debugMessage(`ServiceOps.importService: start, globalConfig=${globalConfig}`);\n const serviceData = importData.service[serviceId];\n const result = await putFullService(\n serviceId,\n serviceData,\n clean,\n globalConfig\n );\n debugMessage(`ServiceOps.importService: end`);\n return result;\n}\n\n/**\n * Imports multiple services from the same file. Optionally clean (remove) existing services first\n * @param {ServiceExportInterface} importData The service configuration export data to import\n * @param {boolean} clean Indicates whether to remove possible existing services first\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n */\nexport async function importServices(\n importData: ServiceExportInterface,\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(\n `ServiceOps.importServices: start, globalConfig=${globalConfig}`\n );\n try {\n const result = await putFullServices(\n Object.entries(importData.service),\n clean,\n globalConfig\n );\n debugMessage(`ServiceOps.importServices: end`);\n return result;\n } catch (error) {\n const message = error.response?.data?.message;\n const detail = error.response?.data?.detail;\n printMessage(`Unable to import services: error: ${message}`, 'error');\n if (detail) {\n printMessage(`Details: ${JSON.stringify(detail)}`, 'error');\n }\n throw error;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ServiceOps.js","names":["createServiceExportTemplate","meta","service","getListOfServices","globalConfig","debugMessage","services","_getListOfServices","result","getFullServices","serviceList","fullServiceData","Promise","all","map","listItem","nextDescendents","getService","_id","getServiceDescendents","error","response","status","data","message","printMessage","filter","putFullService","serviceId","clean","_rev","enabled","deleteFullService","putService","length","descendent","type","_type","descendentId","undefined","putServiceNextDescendent","putFullServices","serviceEntries","results","id","push","detail","JSON","stringify","serviceNextDescendentData","nextDescendent","deleteServiceNextDescendent","deleteService","deleteFullServices","serviceListItem","exportService","exportData","exportServices","importService","importData","serviceData","importServices","Object","entries"],"sources":["ops/ServiceOps.ts"],"sourcesContent":["import { AmServiceSkeleton } from '../api/ApiTypes';\nimport {\n deleteService,\n deleteServiceNextDescendent,\n getService,\n getListOfServices as _getListOfServices,\n getServiceDescendents,\n putService,\n putServiceNextDescendent,\n ServiceNextDescendent,\n} from '../api/ServiceApi';\nimport { ServiceExportInterface } from './OpsTypes';\nimport { debugMessage, printMessage } from './utils/Console';\n\ninterface FullService extends AmServiceSkeleton {\n nextDescendents?: ServiceNextDescendent[];\n}\n\n/**\n * Create an empty service export template\n * @returns {SingleTreeExportInterface} an empty service export template\n */\nexport function createServiceExportTemplate(): ServiceExportInterface {\n return {\n meta: {},\n service: {},\n } as ServiceExportInterface;\n}\n\n/**\n * Get list of services\n * @param {boolean} globalConfig true if the list of global services is requested, false otherwise. Default: false.\n */\nexport async function getListOfServices(globalConfig = false) {\n debugMessage(`ServiceOps.getListOfServices: start`);\n const services = (await _getListOfServices(globalConfig)).result;\n debugMessage(`ServiceOps.getListOfServices: end`);\n return services;\n}\n\n/**\n * Get all services including their descendents.\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns Promise resolving to an array of services with their descendants\n */\nexport async function getFullServices(\n globalConfig = false\n): Promise<FullService[]> {\n debugMessage(\n `ServiceOps.getFullServices: start, globalConfig=${globalConfig}`\n );\n const serviceList = (await _getListOfServices(globalConfig)).result;\n\n const fullServiceData = await Promise.all(\n serviceList.map(async (listItem) => {\n try {\n const [service, nextDescendents] = await Promise.all([\n getService(listItem._id, globalConfig),\n getServiceDescendents(listItem._id, globalConfig),\n ]);\n\n return {\n ...service,\n nextDescendents,\n };\n } catch (error) {\n if (\n !(\n error.response?.status === 403 &&\n error.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n )\n ) {\n const message = error.response?.data?.message;\n printMessage(\n `Unable to retrieve data for ${listItem._id} with error: ${message}`,\n 'error'\n );\n }\n }\n })\n );\n\n debugMessage(`ServiceOps.getFullServices: end`);\n return fullServiceData.filter((data) => !!data); // make sure to filter out any undefined objects\n}\n\n/**\n * Saves a service using the provide id and data, including descendents\n * @param {string} serviceId the service id / name\n * @param {string} fullServiceData service object including descendants\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns promise resolving to a service object\n */\nasync function putFullService(\n serviceId: string,\n fullServiceData: FullService,\n clean: boolean,\n globalConfig = false\n): Promise<AmServiceSkeleton> {\n debugMessage(\n `ServiceOps.putFullService: start, serviceId=${serviceId}, globalConfig=${globalConfig}`\n );\n const nextDescendents = fullServiceData.nextDescendents;\n\n delete fullServiceData.nextDescendents;\n delete fullServiceData._rev;\n delete fullServiceData.enabled;\n\n if (clean) {\n try {\n debugMessage(`ServiceOps.putFullService: clean`);\n await deleteFullService(serviceId, globalConfig);\n } catch (error) {\n if (\n !(\n error.response?.status === 404 &&\n error.response?.data?.message === 'Not Found'\n )\n ) {\n const message = error.response?.data?.message;\n printMessage(\n `Error deleting service '${serviceId}' before import: ${message}`,\n 'error'\n );\n }\n }\n }\n\n // create service first\n const result = await putService(serviceId, fullServiceData, globalConfig);\n\n // return fast if no next descendents supplied\n if (nextDescendents.length === 0) {\n debugMessage(`ServiceOps.putFullService: end (w/o descendents)`);\n return result;\n }\n\n // now create next descendents\n await Promise.all(\n nextDescendents.map(async (descendent) => {\n const type = descendent._type._id;\n const descendentId = descendent._id;\n debugMessage(`ServiceOps.putFullService: descendentId=${descendentId}`);\n let result = undefined;\n try {\n result = await putServiceNextDescendent(\n serviceId,\n type,\n descendentId,\n descendent,\n globalConfig\n );\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(\n `Put descendent '${descendentId}' of service '${serviceId}': ${message}`,\n 'error'\n );\n }\n return result;\n })\n );\n debugMessage(`ServiceOps.putFullService: end (w/ descendents)`);\n}\n\n/**\n * Saves multiple services using the serviceEntries which contain both id and data with descendants\n * @param {[string, FullService][]} serviceEntries The services to add\n * @param {boolean} clean Indicates whether to remove possible existing services first\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns {Promise<AmService[]>} promise resolving to an array of service objects\n */\nasync function putFullServices(\n serviceEntries: [string, FullService][],\n clean: boolean,\n globalConfig = false\n): Promise<AmServiceSkeleton[]> {\n debugMessage(\n `ServiceOps.putFullServices: start, globalConfig=${globalConfig}`\n );\n const results: AmServiceSkeleton[] = [];\n for (const [id, data] of serviceEntries) {\n try {\n const result = await putFullService(id, data, clean, globalConfig);\n results.push(result);\n printMessage(`Imported: ${id}`, 'info');\n } catch (error) {\n const message = error.response?.data?.message;\n const detail = error.response?.data?.detail;\n printMessage(`Import service '${id}': ${message}`, 'error');\n if (detail) {\n printMessage(`Details: ${JSON.stringify(detail)}`, 'error');\n }\n }\n }\n debugMessage(`ServiceOps.putFullServices: end`);\n return results;\n}\n\n/**\n * Deletes the specified service\n * @param {string} serviceId The service to delete\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n */\nexport async function deleteFullService(\n serviceId: string,\n globalConfig = false\n) {\n debugMessage(\n `ServiceOps.deleteFullService: start, globalConfig=${globalConfig}`\n );\n const serviceNextDescendentData = await getServiceDescendents(\n serviceId,\n globalConfig\n );\n\n await Promise.all(\n serviceNextDescendentData.map((nextDescendent) =>\n deleteServiceNextDescendent(\n serviceId,\n nextDescendent._type._id,\n nextDescendent._id,\n globalConfig\n )\n )\n );\n\n await deleteService(serviceId, globalConfig);\n debugMessage(`ServiceOps.deleteFullService: end`);\n}\n\n/**\n * Deletes all services\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n */\nexport async function deleteFullServices(globalConfig = false) {\n debugMessage(\n `ServiceOps.deleteFullServices: start, globalConfig=${globalConfig}`\n );\n try {\n const serviceList = (await _getListOfServices(globalConfig)).result;\n\n await Promise.all(\n serviceList.map(async (serviceListItem) => {\n try {\n await deleteFullService(serviceListItem._id, globalConfig);\n } catch (error) {\n if (\n !(\n error.response?.status === 403 &&\n error.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n )\n ) {\n const message = error.response?.data?.message;\n printMessage(\n `Delete service '${serviceListItem._id}': ${message}`,\n 'error'\n );\n }\n }\n })\n );\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Delete services: ${message}`, 'error');\n }\n debugMessage(`ServiceOps.deleteFullServices: end`);\n}\n\n/**\n * Export service. The response can be saved to file as is.\n * @param serviceId service id/name\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns {Promise<ServiceExportInterface>} Promise resolving to a ServiceExportInterface object.\n */\nexport async function exportService(\n serviceId: string,\n globalConfig = false\n): Promise<ServiceExportInterface> {\n debugMessage(`ServiceOps.exportService: start, globalConfig=${globalConfig}`);\n const exportData = createServiceExportTemplate();\n try {\n const service = await getService(serviceId, globalConfig);\n service.nextDescendents = await getServiceDescendents(\n serviceId,\n globalConfig\n );\n exportData.service[serviceId] = service;\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Export service '${serviceId}': ${message}`, 'error');\n }\n debugMessage(`ServiceOps.exportService: end`);\n return exportData;\n}\n\n/**\n * Export all services\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n */\nexport async function exportServices(\n globalConfig = false\n): Promise<ServiceExportInterface> {\n debugMessage(\n `ServiceOps.exportServices: start, globalConfig=${globalConfig}`\n );\n const exportData = createServiceExportTemplate();\n try {\n const services = await getFullServices(globalConfig);\n for (const service of services) {\n exportData.service[service._type._id] = service;\n }\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Export servics: ${message}`, 'error');\n }\n debugMessage(`ServiceOps.exportServices: end`);\n return exportData;\n}\n\n/**\n * Imports a single service using a reference to the service and a file to read the data from. Optionally clean (remove) an existing service first\n * @param {string} serviceId The service id/name to add\n * @param {ServiceExportInterface} importData The service configuration export data to import\n * @param {boolean} clean Indicates whether to remove a possible existing service with the same id first.\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n * @returns Promise resolving when the service has been imported\n */\nexport async function importService(\n serviceId: string,\n importData: ServiceExportInterface,\n clean: boolean,\n globalConfig = false\n): Promise<AmServiceSkeleton> {\n debugMessage(`ServiceOps.importService: start, globalConfig=${globalConfig}`);\n const serviceData = importData.service[serviceId];\n const result = await putFullService(\n serviceId,\n serviceData,\n clean,\n globalConfig\n );\n debugMessage(`ServiceOps.importService: end`);\n return result;\n}\n\n/**\n * Imports multiple services from the same file. Optionally clean (remove) existing services first\n * @param {ServiceExportInterface} importData The service configuration export data to import\n * @param {boolean} clean Indicates whether to remove possible existing services first\n * @param {boolean} globalConfig true if the global service is the target of the operation, false otherwise. Default: false.\n */\nexport async function importServices(\n importData: ServiceExportInterface,\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(\n `ServiceOps.importServices: start, globalConfig=${globalConfig}`\n );\n try {\n const result = await putFullServices(\n Object.entries(importData.service),\n clean,\n globalConfig\n );\n debugMessage(`ServiceOps.importServices: end`);\n return result;\n } catch (error) {\n const message = error.response?.data?.message;\n const detail = error.response?.data?.detail;\n printMessage(`Unable to import services: error: ${message}`, 'error');\n if (detail) {\n printMessage(`Details: ${JSON.stringify(detail)}`, 'error');\n }\n throw error;\n }\n}\n"],"mappings":"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"}
@@ -187,9 +187,7 @@ function findFilesByName(fileName) {
187
187
 
188
188
  // search sub-folders
189
189
  var folders = entries.filter(entry => entry.isDirectory());
190
- for (var folder of folders) {
191
- files.push(...findFilesByName(fileName, fast, "".concat(path).concat(folder.name, "/")));
192
- }
190
+ for (var folder of folders) files.push(...findFilesByName(fileName, fast, "".concat(path).concat(folder.name, "/")));
193
191
  return files;
194
192
  }
195
193
 
@@ -1 +1 @@
1
- {"version":3,"file":"ExportImportUtils.js","names":["getCurrentTimestamp","ts","Date","toISOString","getMetadata","metadata","origin","state","getHost","originAmVersion","getAmVersion","exportedBy","getUsername","exportDate","exportTool","FRODO_METADATA_ID","exportToolVersion","getFrodoVersion","titleCase","input","str","toString","splitStr","toLowerCase","split","i","length","charAt","toUpperCase","slice","join","getRealmString","realm","getRealm","reduce","result","item","convertBase64TextToArray","b64text","arrayOut","plainText","decode","replace","convertBase64UrlTextToArray","b64UTF8Text","decodeBase64Url","convertTextArrayToBase64","textArray","joinedText","b64encodedScript","encode","convertTextArrayToBase64Url","encodeBase64Url","validateImport","getTypedFilename","name","type","suffix","slug","slugify","getWorkingDirectory","wd","getDirectory","fs","existsSync","debugMessage","mkdirSync","recursive","saveToFile","data","identifier","filename","exportData","Array","isArray","forEach","element","writeFile","JSON","stringify","err","printMessage","saveJsonToFile","includeMeta","meta","writeFileSync","appendTextToFile","appendFileSync","error","message","findFilesByName","fileName","fast","path","entries","readdirSync","encoding","withFileTypes","files","filter","entry","isDirectory","file","map","folders","folder","push","readFilesRecursive","directory","items","readdir","filePathsNested","Promise","all","entity","lstat","flat"],"sources":["ops/utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport { lstat, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport slugify from 'slugify';\nimport {\n decode,\n decodeBase64Url,\n encode,\n encodeBase64Url,\n} from '../../api/utils/Base64';\nimport * as state from '../../shared/State';\nimport { FRODO_METADATA_ID } from '../../storage/StaticStorage';\nimport { ExportMetaData } from '../OpsTypes';\nimport { debugMessage, printMessage } from './Console';\n\nexport function getCurrentTimestamp() {\n const ts = new Date();\n return ts.toISOString();\n}\n\nexport function getMetadata(): ExportMetaData {\n const metadata: ExportMetaData = {\n origin: state.getHost(),\n originAmVersion: state.getAmVersion(),\n exportedBy: state.getUsername(),\n exportDate: getCurrentTimestamp(),\n exportTool: FRODO_METADATA_ID,\n exportToolVersion: state.getFrodoVersion(),\n };\n return metadata;\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString() {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n\nexport function convertBase64TextToArray(b64text) {\n let arrayOut = [];\n let plainText = decode(b64text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertBase64UrlTextToArray(b64UTF8Text) {\n let arrayOut = [];\n let plainText = decodeBase64Url(b64UTF8Text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertTextArrayToBase64(textArray) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encode(joinedText);\n return b64encodedScript;\n}\n\nexport function convertTextArrayToBase64Url(textArray) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encodeBase64Url(joinedText);\n return b64encodedScript;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function validateImport(metadata): boolean {\n return metadata || true;\n}\n\nexport function getTypedFilename(name: string, type: string, suffix = 'json') {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''));\n return `${slug}.${type}.${suffix}`;\n}\n\nexport function getWorkingDirectory() {\n let wd = '.';\n if (state.getDirectory()) {\n wd = state.getDirectory().replace(/\\/$/, '');\n // create directory if it doesn't exist\n if (!fs.existsSync(wd)) {\n debugMessage(\n `ExportImportUtils.getWorkingDirectory: creating directory '${wd}'`\n );\n fs.mkdirSync(wd, { recursive: true });\n }\n }\n return wd;\n}\n\nexport function saveToFile(type, data, identifier, filename) {\n const exportData = {};\n exportData['meta'] = getMetadata();\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n fs.writeFile(filename, JSON.stringify(exportData, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${type} to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @return {boolean} true if successful, false otherwise\n */\nexport function saveJsonToFile(data, filename, includeMeta = true): boolean {\n const exportData = data;\n if (includeMeta) exportData.meta = getMetadata();\n try {\n fs.writeFileSync(filename, JSON.stringify(exportData, null, 2));\n return true;\n } catch (err) {\n printMessage(`ERROR - can't save ${filename}`, 'error');\n return false;\n }\n}\n\n/**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\nexport function appendTextToFile(data, filename) {\n try {\n fs.appendFileSync(filename, data);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\nexport function findFilesByName(\n fileName: string,\n fast = true,\n path = './'\n): string[] {\n const entries = fs.readdirSync(path, {\n encoding: 'utf8',\n withFileTypes: true,\n });\n\n // Get files within the current directory and add a path key to the file objects\n const files: string[] = entries\n .filter((entry) => !entry.isDirectory())\n .filter((file) => file.name === fileName)\n // .map((file) => ({ ...file, path: path + file.name }));\n .map((file) => path + file.name);\n\n if (fast && files.length > 0) return files;\n\n // search sub-folders\n const folders = entries.filter((entry) => entry.isDirectory());\n for (const folder of folders)\n files.push(...findFilesByName(fileName, fast, `${path}${folder.name}/`));\n\n return files;\n}\n\n/**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\nexport async function readFilesRecursive(directory: string): Promise<string[]> {\n const items = await readdir(directory);\n\n const filePathsNested = await Promise.all(\n items.map(async (entity) => {\n const path = join(directory, entity);\n const isDirectory = (await lstat(path)).isDirectory();\n\n if (isDirectory) {\n return readFilesRecursive(path);\n }\n return path;\n })\n );\n\n return filePathsNested.flat();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AAEA;AAAuD;AAAA;AAAA;AAAA;AAAA;AAEhD,SAASA,mBAAmB,GAAG;EACpC,IAAMC,EAAE,GAAG,IAAIC,IAAI,EAAE;EACrB,OAAOD,EAAE,CAACE,WAAW,EAAE;AACzB;AAEO,SAASC,WAAW,GAAmB;EAC5C,IAAMC,QAAwB,GAAG;IAC/BC,MAAM,EAAEC,KAAK,CAACC,OAAO,EAAE;IACvBC,eAAe,EAAEF,KAAK,CAACG,YAAY,EAAE;IACrCC,UAAU,EAAEJ,KAAK,CAACK,WAAW,EAAE;IAC/BC,UAAU,EAAEb,mBAAmB,EAAE;IACjCc,UAAU,EAAEC,gCAAiB;IAC7BC,iBAAiB,EAAET,KAAK,CAACU,eAAe;EAC1C,CAAC;EACD,OAAOZ,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASa,SAAS,CAACC,KAAK,EAAE;EAC/B,IAAMC,GAAG,GAAGD,KAAK,CAACE,QAAQ,EAAE;EAC5B,IAAMC,QAAQ,GAAGF,GAAG,CAACG,WAAW,EAAE,CAACC,KAAK,CAAC,GAAG,CAAC;EAC7C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAACI,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;IAC3CH,QAAQ,CAACG,CAAC,CAAC,GAAGH,QAAQ,CAACG,CAAC,CAAC,CAACE,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGN,QAAQ,CAACG,CAAC,CAAC,CAACI,KAAK,CAAC,CAAC,CAAC;EAC1E;EACA,OAAOP,QAAQ,CAACQ,IAAI,CAAC,GAAG,CAAC;AAC3B;AAEO,SAASC,cAAc,GAAG;EAC/B,IAAMC,KAAK,GAAGzB,KAAK,CAAC0B,QAAQ,EAAE;EAC9B,OAAOD,KAAK,CACTR,KAAK,CAAC,GAAG,CAAC,CACVU,MAAM,CAAC,CAACC,MAAM,EAAEC,IAAI,eAAQD,MAAM,SAAGjB,SAAS,CAACkB,IAAI,CAAC,CAAE,EAAE,EAAE,CAAC;AAChE;AAEO,SAASC,wBAAwB,CAACC,OAAO,EAAE;EAChD,IAAIC,QAAQ,GAAG,EAAE;EACjB,IAAIC,SAAS,GAAG,IAAAC,YAAM,EAACH,OAAO,CAAC;EAC/BE,SAAS,GAAGA,SAAS,CAACE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;EAC5CH,QAAQ,GAAGC,SAAS,CAAChB,KAAK,CAAC,IAAI,CAAC;EAChC,OAAOe,QAAQ;AACjB;AAEO,SAASI,2BAA2B,CAACC,WAAW,EAAE;EACvD,IAAIL,QAAQ,GAAG,EAAE;EACjB,IAAIC,SAAS,GAAG,IAAAK,qBAAe,EAACD,WAAW,CAAC;EAC5CJ,SAAS,GAAGA,SAAS,CAACE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;EAC5CH,QAAQ,GAAGC,SAAS,CAAChB,KAAK,CAAC,IAAI,CAAC;EAChC,OAAOe,QAAQ;AACjB;AAEO,SAASO,wBAAwB,CAACC,SAAS,EAAE;EAClD,IAAMC,UAAU,GAAGD,SAAS,CAACjB,IAAI,CAAC,IAAI,CAAC;EACvC,IAAMmB,gBAAgB,GAAG,IAAAC,YAAM,EAACF,UAAU,CAAC;EAC3C,OAAOC,gBAAgB;AACzB;AAEO,SAASE,2BAA2B,CAACJ,SAAS,EAAE;EACrD,IAAMC,UAAU,GAAGD,SAAS,CAACjB,IAAI,CAAC,IAAI,CAAC;EACvC,IAAMmB,gBAAgB,GAAG,IAAAG,qBAAe,EAACJ,UAAU,CAAC;EACpD,OAAOC,gBAAgB;AACzB;;AAEA;AACO,SAASI,cAAc,CAAChD,QAAQ,EAAW;EAChD,OAAOA,QAAQ,IAAI,IAAI;AACzB;AAEO,SAASiD,gBAAgB,CAACC,IAAY,EAAEC,IAAY,EAAmB;EAAA,IAAjBC,MAAM,uEAAG,MAAM;EAC1E,IAAMC,IAAI,GAAG,IAAAC,gBAAO,EAACJ,IAAI,CAACb,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;EACxD,iBAAUgB,IAAI,cAAIF,IAAI,cAAIC,MAAM;AAClC;AAEO,SAASG,mBAAmB,GAAG;EACpC,IAAIC,EAAE,GAAG,GAAG;EACZ,IAAItD,KAAK,CAACuD,YAAY,EAAE,EAAE;IACxBD,EAAE,GAAGtD,KAAK,CAACuD,YAAY,EAAE,CAACpB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC5C;IACA,IAAI,CAACqB,WAAE,CAACC,UAAU,CAACH,EAAE,CAAC,EAAE;MACtB,IAAAI,qBAAY,uEACoDJ,EAAE,OACjE;MACDE,WAAE,CAACG,SAAS,CAACL,EAAE,EAAE;QAAEM,SAAS,EAAE;MAAK,CAAC,CAAC;IACvC;EACF;EACA,OAAON,EAAE;AACX;AAEO,SAASO,UAAU,CAACZ,IAAI,EAAEa,IAAI,EAAEC,UAAU,EAAEC,QAAQ,EAAE;EAC3D,IAAMC,UAAU,GAAG,CAAC,CAAC;EACrBA,UAAU,CAAC,MAAM,CAAC,GAAGpE,WAAW,EAAE;EAClCoE,UAAU,CAAChB,IAAI,CAAC,GAAG,CAAC,CAAC;EAErB,IAAIiB,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE;IACvBA,IAAI,CAACM,OAAO,CAAEC,OAAO,IAAK;MACxBJ,UAAU,CAAChB,IAAI,CAAC,CAACoB,OAAO,CAACN,UAAU,CAAC,CAAC,GAAGM,OAAO;IACjD,CAAC,CAAC;EACJ,CAAC,MAAM;IACLJ,UAAU,CAAChB,IAAI,CAAC,CAACa,IAAI,CAACC,UAAU,CAAC,CAAC,GAAGD,IAAI;EAC3C;EACAN,WAAE,CAACc,SAAS,CAACN,QAAQ,EAAEO,IAAI,CAACC,SAAS,CAACP,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAGQ,GAAG,IAAK;IACnE,IAAIA,GAAG,EAAE;MACP,OAAO,IAAAC,qBAAY,+BAAuBzB,IAAI,eAAY,OAAO,CAAC;IACpE;IACA,OAAO,EAAE;EACX,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS0B,cAAc,CAACb,IAAI,EAAEE,QAAQ,EAA+B;EAAA,IAA7BY,WAAW,uEAAG,IAAI;EAC/D,IAAMX,UAAU,GAAGH,IAAI;EACvB,IAAIc,WAAW,EAAEX,UAAU,CAACY,IAAI,GAAGhF,WAAW,EAAE;EAChD,IAAI;IACF2D,WAAE,CAACsB,aAAa,CAACd,QAAQ,EAAEO,IAAI,CAACC,SAAS,CAACP,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/D,OAAO,IAAI;EACb,CAAC,CAAC,OAAOQ,GAAG,EAAE;IACZ,IAAAC,qBAAY,+BAAuBV,QAAQ,GAAI,OAAO,CAAC;IACvD,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASe,gBAAgB,CAACjB,IAAI,EAAEE,QAAQ,EAAE;EAC/C,IAAI;IACFR,WAAE,CAACwB,cAAc,CAAChB,QAAQ,EAAEF,IAAI,CAAC;EACnC,CAAC,CAAC,OAAOmB,KAAK,EAAE;IACd,IAAAP,qBAAY,YAAIO,KAAK,CAACC,OAAO,GAAI,OAAO,CAAC;EAC3C;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAe,CAC7BC,QAAgB,EAGN;EAAA,IAFVC,IAAI,uEAAG,IAAI;EAAA,IACXC,IAAI,uEAAG,IAAI;EAEX,IAAMC,OAAO,GAAG/B,WAAE,CAACgC,WAAW,CAACF,IAAI,EAAE;IACnCG,QAAQ,EAAE,MAAM;IAChBC,aAAa,EAAE;EACjB,CAAC,CAAC;;EAEF;EACA,IAAMC,KAAe,GAAGJ,OAAO,CAC5BK,MAAM,CAAEC,KAAK,IAAK,CAACA,KAAK,CAACC,WAAW,EAAE,CAAC,CACvCF,MAAM,CAAEG,IAAI,IAAKA,IAAI,CAAC/C,IAAI,KAAKoC,QAAQ;EACxC;EAAA,CACCY,GAAG,CAAED,IAAI,IAAKT,IAAI,GAAGS,IAAI,CAAC/C,IAAI,CAAC;EAElC,IAAIqC,IAAI,IAAIM,KAAK,CAACxE,MAAM,GAAG,CAAC,EAAE,OAAOwE,KAAK;;EAE1C;EACA,IAAMM,OAAO,GAAGV,OAAO,CAACK,MAAM,CAAEC,KAAK,IAAKA,KAAK,CAACC,WAAW,EAAE,CAAC;EAC9D,KAAK,IAAMI,MAAM,IAAID,OAAO;IAC1BN,KAAK,CAACQ,IAAI,CAAC,GAAGhB,eAAe,CAACC,QAAQ,EAAEC,IAAI,YAAKC,IAAI,SAAGY,MAAM,CAAClD,IAAI,OAAI,CAAC;EAAC;EAE3E,OAAO2C,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA,SAMsBS,kBAAkB;EAAA;AAAA;AAAA;EAAA,wCAAjC,WAAkCC,SAAiB,EAAqB;IAC7E,IAAMC,KAAK,SAAS,IAAAC,iBAAO,EAACF,SAAS,CAAC;IAEtC,IAAMG,eAAe,SAASC,OAAO,CAACC,GAAG,CACvCJ,KAAK,CAACN,GAAG;MAAA,6BAAC,WAAOW,MAAM,EAAK;QAC1B,IAAMrB,IAAI,GAAG,IAAA/D,UAAI,EAAC8E,SAAS,EAAEM,MAAM,CAAC;QACpC,IAAMb,WAAW,GAAG,OAAO,IAAAc,eAAK,EAACtB,IAAI,CAAC,EAAEQ,WAAW,EAAE;QAErD,IAAIA,WAAW,EAAE;UACf,OAAOM,kBAAkB,CAACd,IAAI,CAAC;QACjC;QACA,OAAOA,IAAI;MACb,CAAC;MAAA;QAAA;MAAA;IAAA,IAAC,CACH;IAED,OAAOkB,eAAe,CAACK,IAAI,EAAE;EAC/B,CAAC;EAAA;AAAA"}
1
+ {"version":3,"file":"ExportImportUtils.js","names":["getCurrentTimestamp","ts","Date","toISOString","getMetadata","metadata","origin","state","getHost","originAmVersion","getAmVersion","exportedBy","getUsername","exportDate","exportTool","FRODO_METADATA_ID","exportToolVersion","getFrodoVersion","titleCase","input","str","toString","splitStr","toLowerCase","split","i","length","charAt","toUpperCase","slice","join","getRealmString","realm","getRealm","reduce","result","item","convertBase64TextToArray","b64text","arrayOut","plainText","decode","replace","convertBase64UrlTextToArray","b64UTF8Text","decodeBase64Url","convertTextArrayToBase64","textArray","joinedText","b64encodedScript","encode","convertTextArrayToBase64Url","encodeBase64Url","validateImport","getTypedFilename","name","type","suffix","slug","slugify","getWorkingDirectory","wd","getDirectory","fs","existsSync","debugMessage","mkdirSync","recursive","saveToFile","data","identifier","filename","exportData","Array","isArray","forEach","element","writeFile","JSON","stringify","err","printMessage","saveJsonToFile","includeMeta","meta","writeFileSync","appendTextToFile","appendFileSync","error","message","findFilesByName","fileName","fast","path","entries","readdirSync","encoding","withFileTypes","files","filter","entry","isDirectory","file","map","folders","folder","push","readFilesRecursive","directory","items","readdir","filePathsNested","Promise","all","entity","lstat","flat"],"sources":["ops/utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport { lstat, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport slugify from 'slugify';\nimport {\n decode,\n decodeBase64Url,\n encode,\n encodeBase64Url,\n} from '../../api/utils/Base64';\nimport * as state from '../../shared/State';\nimport { FRODO_METADATA_ID } from '../../storage/StaticStorage';\nimport { ExportMetaData } from '../OpsTypes';\nimport { debugMessage, printMessage } from './Console';\n\nexport function getCurrentTimestamp() {\n const ts = new Date();\n return ts.toISOString();\n}\n\nexport function getMetadata(): ExportMetaData {\n const metadata: ExportMetaData = {\n origin: state.getHost(),\n originAmVersion: state.getAmVersion(),\n exportedBy: state.getUsername(),\n exportDate: getCurrentTimestamp(),\n exportTool: FRODO_METADATA_ID,\n exportToolVersion: state.getFrodoVersion(),\n };\n return metadata;\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString() {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n\nexport function convertBase64TextToArray(b64text) {\n let arrayOut = [];\n let plainText = decode(b64text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertBase64UrlTextToArray(b64UTF8Text) {\n let arrayOut = [];\n let plainText = decodeBase64Url(b64UTF8Text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertTextArrayToBase64(textArray) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encode(joinedText);\n return b64encodedScript;\n}\n\nexport function convertTextArrayToBase64Url(textArray) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encodeBase64Url(joinedText);\n return b64encodedScript;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function validateImport(metadata): boolean {\n return metadata || true;\n}\n\nexport function getTypedFilename(name: string, type: string, suffix = 'json') {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''));\n return `${slug}.${type}.${suffix}`;\n}\n\nexport function getWorkingDirectory() {\n let wd = '.';\n if (state.getDirectory()) {\n wd = state.getDirectory().replace(/\\/$/, '');\n // create directory if it doesn't exist\n if (!fs.existsSync(wd)) {\n debugMessage(\n `ExportImportUtils.getWorkingDirectory: creating directory '${wd}'`\n );\n fs.mkdirSync(wd, { recursive: true });\n }\n }\n return wd;\n}\n\nexport function saveToFile(type, data, identifier, filename) {\n const exportData = {};\n exportData['meta'] = getMetadata();\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n fs.writeFile(filename, JSON.stringify(exportData, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${type} to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @return {boolean} true if successful, false otherwise\n */\nexport function saveJsonToFile(data, filename, includeMeta = true): boolean {\n const exportData = data;\n if (includeMeta) exportData.meta = getMetadata();\n try {\n fs.writeFileSync(filename, JSON.stringify(exportData, null, 2));\n return true;\n } catch (err) {\n printMessage(`ERROR - can't save ${filename}`, 'error');\n return false;\n }\n}\n\n/**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\nexport function appendTextToFile(data, filename) {\n try {\n fs.appendFileSync(filename, data);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\nexport function findFilesByName(\n fileName: string,\n fast = true,\n path = './'\n): string[] {\n const entries = fs.readdirSync(path, {\n encoding: 'utf8',\n withFileTypes: true,\n });\n\n // Get files within the current directory and add a path key to the file objects\n const files: string[] = entries\n .filter((entry) => !entry.isDirectory())\n .filter((file) => file.name === fileName)\n // .map((file) => ({ ...file, path: path + file.name }));\n .map((file) => path + file.name);\n\n if (fast && files.length > 0) return files;\n\n // search sub-folders\n const folders = entries.filter((entry) => entry.isDirectory());\n for (const folder of folders)\n files.push(...findFilesByName(fileName, fast, `${path}${folder.name}/`));\n\n return files;\n}\n\n/**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\nexport async function readFilesRecursive(directory: string): Promise<string[]> {\n const items = await readdir(directory);\n\n const filePathsNested = await Promise.all(\n items.map(async (entity) => {\n const path = join(directory, entity);\n const isDirectory = (await lstat(path)).isDirectory();\n\n if (isDirectory) {\n return readFilesRecursive(path);\n }\n return path;\n })\n );\n\n return filePathsNested.flat();\n}\n"],"mappings":"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"}
@@ -10,7 +10,9 @@ var _url = require("url");
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
12
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
15
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
16
  var _dirname = _path.default.dirname((0, _url.fileURLToPath)(require('url').pathToFileURL(__filename).toString()));
15
17
  var pkg = JSON.parse(_fs.default.readFileSync(_path.default.resolve(_dirname, '../../package.json'), 'utf8'));
16
18
  var _state = {
@@ -1 +1 @@
1
- {"version":3,"file":"State.js","names":["__dirname","path","dirname","fileURLToPath","pkg","JSON","parse","fs","readFileSync","resolve","_state","authenticationHeaderOverrides","printHandler","message","console","dir","depth","log","verboseHandler","getVerbose","debugHandler","getDebug","curlirizeHandler","setHost","host","getHost","process","env","FRODO_HOST","setTenant","getTenant","setUsername","username","getUsername","FRODO_USERNAME","setPassword","password","getPassword","FRODO_PASSWORD","setRealm","realm","getRealm","FRODO_REALM","setDeploymentType","type","deploymentType","getDeploymentType","setAllowInsecureConnection","allowInsecureConnection","getAllowInsecureConnection","setCookieName","name","cookieName","getCookieName","setCookieValue","value","cookieValue","getCookieValue","setAuthenticationHeaderOverrides","overrides","getAuthenticationHeaderOverrides","setAuthenticationService","service","authenticationService","getAuthenticationService","FRODO_AUTHENTICATION_SERVICE","setServiceAccountId","uuid","serviceAccountId","getServiceAccountId","FRODO_SA_ID","setServiceAccountJwk","jwk","serviceAccountJwk","getServiceAccountJwk","FRODO_SA_JWK","undefined","setUseBearerTokenForAmApis","useBearerTokenForAmApis","getUseBearerTokenForAmApis","setBearerToken","token","bearerToken","getBearerToken","setLogApiKey","key","logApiKey","getLogApiKey","FRODO_LOG_KEY","setLogApiSecret","secret","logApiSecret","getLogApiSecret","FRODO_LOG_SECRET","setAmVersion","version","amVersion","getAmVersion","setFrodoVersion","frodoVersion","getFrodoVersion","setConnectionProfilesPath","connectionProfilesPath","getConnectionProfilesPath","setMasterKeyPath","masterKeyPath","getMasterKeyPath","setOutputFile","file","outputFile","getOutputFile","setDirectory","directory","getDirectory","setPrintHandler","handler","getPrintHandler","setVerboseHandler","getVerboseHandler","setVerbose","verbose","setDebugHandler","getDebugHandler","setDebug","debug","FRODO_DEBUG","setCurlirizeHandler","getCurlirizeHandler","setCurlirize","curlirize","getCurlirize","setCreateProgressHandler","createProgressHandler","getCreateProgressHandler","setUpdateProgressHandler","updateProgressHandler","getUpdateProgressHandler","setStopProgressHandler","stopProgressHandler","getStopProgressHandler","session"],"sources":["shared/State.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { JwkRsa } from '../ops/JoseOps';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../../package.json'), 'utf8')\n);\n\nexport interface StateInterface {\n // connection settings\n host?: string;\n username?: string;\n password?: string;\n realm?: string;\n deploymentType?: string;\n allowInsecureConnection?: boolean;\n // customize authentication\n authenticationHeaderOverrides?: Record<string, string>;\n authenticationService?: string;\n // cookie settings\n cookieName?: string;\n cookieValue?: string;\n // service account settings\n serviceAccountId?: string;\n serviceAccountJwk?: JwkRsa;\n // bearer token settings\n useBearerTokenForAmApis?: boolean;\n bearerToken?: string;\n // log api settings\n logApiKey?: string;\n logApiSecret?: string;\n // versions\n amVersion?: string;\n frodoVersion?: string;\n // miscellaneous settings\n connectionProfilesPath?: string;\n masterKeyPath?: string;\n outputFile?: string;\n directory?: string;\n // output handler settings\n printHandler?: (\n message: string | object,\n type?: string,\n newline?: boolean\n ) => void;\n verboseHandler?: (message: string | object) => void;\n verbose?: boolean;\n debugHandler?: (message: string | object) => void;\n debug?: boolean;\n curlirizeHandler?: (message: string) => void;\n curlirize?: boolean;\n createProgressHandler?: (\n type: string,\n total?: number,\n message?: string\n ) => void;\n updateProgressHandler?: (message: string) => void;\n stopProgressHandler?: (message: string, status?: string) => void;\n}\n\nconst _state: StateInterface = {\n authenticationHeaderOverrides: {},\n printHandler: (message: string | object) => {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else {\n console.log(message);\n }\n },\n verboseHandler: (message: string | object) => {\n if (!message) return;\n if (getVerbose()) {\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else {\n console.log(message);\n }\n }\n },\n debugHandler: (message: string | object) => {\n if (!message) return;\n if (getDebug()) {\n if (typeof message === 'object') {\n console.dir(message, { depth: 6 });\n } else {\n console.log(message);\n }\n }\n },\n curlirizeHandler: (message: string) => {\n if (!message) return;\n if (getDebug()) {\n console.log(message);\n }\n },\n};\n\nexport const setHost = (host: string) => (_state.host = host);\nexport const getHost = () => _state.host || process.env.FRODO_HOST;\n\n/**\n * @deprecated since v0.17.0 use `setHost(host: string)` instead\n */\nexport const setTenant = setHost;\n/**\n * @deprecated since v0.17.0 use `getHost` instead\n */\nexport const getTenant = getHost;\n\nexport const setUsername = (username: string) => (_state.username = username);\nexport const getUsername = () => _state.username || process.env.FRODO_USERNAME;\n\nexport const setPassword = (password: string) => (_state.password = password);\nexport const getPassword = () => _state.password || process.env.FRODO_PASSWORD;\n\nexport const setRealm = (realm: string) => (_state.realm = realm);\nexport const getRealm = () => _state.realm || process.env.FRODO_REALM;\n\nexport const setDeploymentType = (type: string) =>\n (_state.deploymentType = type);\nexport const getDeploymentType = () => _state.deploymentType;\n\nexport const setAllowInsecureConnection = (allowInsecureConnection: boolean) =>\n (_state.allowInsecureConnection = allowInsecureConnection);\nexport const getAllowInsecureConnection = () =>\n _state['allowInsecureConnection'];\n\nexport const setCookieName = (name: string) => (_state.cookieName = name);\nexport const getCookieName = () => _state.cookieName;\nexport const setCookieValue = (value: string) => (_state.cookieValue = value);\nexport const getCookieValue = () => _state.cookieValue;\n\nexport const setAuthenticationHeaderOverrides = (\n overrides: Record<string, string>\n) => (_state.authenticationHeaderOverrides = overrides);\nexport const getAuthenticationHeaderOverrides = () =>\n _state.authenticationHeaderOverrides;\nexport const setAuthenticationService = (service: string) =>\n (_state.authenticationService = service);\nexport const getAuthenticationService = () =>\n _state.authenticationService || process.env.FRODO_AUTHENTICATION_SERVICE;\n\nexport const setServiceAccountId = (uuid: string) =>\n (_state.serviceAccountId = uuid);\nexport const getServiceAccountId = (): string =>\n _state.serviceAccountId || process.env.FRODO_SA_ID;\nexport const setServiceAccountJwk = (jwk: JwkRsa) =>\n (_state.serviceAccountJwk = { ...jwk });\nexport const getServiceAccountJwk = (): JwkRsa =>\n _state.serviceAccountJwk ||\n (process.env.FRODO_SA_JWK ? JSON.parse(process.env.FRODO_SA_JWK) : undefined);\n\nexport const setUseBearerTokenForAmApis = (useBearerTokenForAmApis: boolean) =>\n (_state.useBearerTokenForAmApis = useBearerTokenForAmApis);\nexport const getUseBearerTokenForAmApis = () => _state.useBearerTokenForAmApis;\nexport const setBearerToken = (token: string) => (_state.bearerToken = token);\nexport const getBearerToken = () => _state.bearerToken;\n\nexport const setLogApiKey = (key: string) => (_state.logApiKey = key);\nexport const getLogApiKey = () => _state.logApiKey || process.env.FRODO_LOG_KEY;\nexport const setLogApiSecret = (secret: string) =>\n (_state.logApiSecret = secret);\nexport const getLogApiSecret = () =>\n _state.logApiSecret || process.env.FRODO_LOG_SECRET;\n\nexport const setAmVersion = (version: string) => (_state.amVersion = version);\nexport const getAmVersion = () => _state.amVersion;\n\nexport const setFrodoVersion = (version: string) =>\n (_state.frodoVersion = version);\nexport const getFrodoVersion = () =>\n _state.frodoVersion || `v${pkg.version} [${process.version}]`;\n\nexport const setConnectionProfilesPath = (path: string) =>\n (_state.connectionProfilesPath = path);\nexport const getConnectionProfilesPath = () => _state.connectionProfilesPath;\n\nexport const setMasterKeyPath = (path: string) => (_state.masterKeyPath = path);\nexport const getMasterKeyPath = () => _state.masterKeyPath;\n\nexport const setOutputFile = (file: string) => (_state.outputFile = file);\nexport const getOutputFile = () => _state.outputFile;\n\nexport const setDirectory = (directory: string) =>\n (_state.directory = directory);\nexport const getDirectory = () => _state.directory;\n\nexport const setPrintHandler = (\n handler: (message: string | object, type?: string, newline?: boolean) => void\n) => (_state.printHandler = handler);\nexport const getPrintHandler = () => _state.printHandler;\n\nexport const setVerboseHandler = (\n handler: (message: string | object) => void\n) => (_state.verboseHandler = handler);\nexport const getVerboseHandler = () => _state.verboseHandler;\nexport const setVerbose = (verbose: boolean) => (_state.verbose = verbose);\nexport const getVerbose = (): boolean => _state.verbose;\n\nexport const setDebugHandler = (handler: (message: string | object) => void) =>\n (_state.debugHandler = handler);\nexport const getDebugHandler = () => _state.debugHandler;\nexport const setDebug = (debug: boolean) => (_state.debug = debug);\nexport const getDebug = (): boolean =>\n _state.debug || process.env.FRODO_DEBUG !== undefined;\n\nexport const setCurlirizeHandler = (handler: (message: string) => void) =>\n (_state.curlirizeHandler = handler);\nexport const getCurlirizeHandler = () => _state.curlirizeHandler;\nexport const setCurlirize = (curlirize: boolean) =>\n (_state.curlirize = curlirize);\nexport const getCurlirize = (): boolean => _state.curlirize;\n\nexport const setCreateProgressHandler = (\n handler: (type: string, total?: number, message?: string) => void\n) => (_state.createProgressHandler = handler);\nexport const getCreateProgressHandler = () => _state.createProgressHandler;\nexport const setUpdateProgressHandler = (handler: (message: string) => void) =>\n (_state.updateProgressHandler = handler);\nexport const getUpdateProgressHandler = () => _state.updateProgressHandler;\nexport const setStopProgressHandler = (\n handler: (message: string, status?: string) => void\n) => (_state.stopProgressHandler = handler);\nexport const getStopProgressHandler = () => _state.stopProgressHandler;\n\n/**\n * @deprecated since version v0.17.0. Import state:\n *\n * ```import { state } from '@rockcarver/frodo-lib';```\n *\n * then call functions:\n *\n * ```const username = state.getUsername();```\n */\nexport default {\n session: {\n setHost,\n getHost,\n\n setTenant,\n getTenant,\n\n setUsername,\n getUsername,\n\n setPassword,\n getPassword,\n\n setRealm,\n getRealm,\n\n setDeploymentType,\n getDeploymentType,\n\n setAllowInsecureConnection,\n getAllowInsecureConnection,\n\n setCookieName,\n getCookieName,\n setCookieValue,\n getCookieValue,\n\n setAuthenticationHeaderOverrides,\n getAuthenticationHeaderOverrides,\n setAuthenticationService,\n getAuthenticationService,\n\n setServiceAccountId,\n getServiceAccountId,\n setServiceAccountJwk,\n getServiceAccountJwk,\n\n setUseBearerTokenForAmApis,\n getUseBearerTokenForAmApis,\n setBearerToken,\n getBearerToken,\n\n setLogApiKey,\n getLogApiKey,\n setLogApiSecret,\n getLogApiSecret,\n\n setAmVersion,\n getAmVersion,\n\n setFrodoVersion,\n getFrodoVersion,\n\n setConnectionProfilesPath,\n getConnectionProfilesPath,\n\n setMasterKeyPath,\n getMasterKeyPath,\n\n setOutputFile,\n getOutputFile,\n\n setDirectory,\n getDirectory,\n\n setPrintHandler,\n getPrintHandler,\n\n setVerboseHandler,\n getVerboseHandler,\n setVerbose,\n getVerbose,\n\n setDebugHandler,\n getDebugHandler,\n setDebug,\n getDebug,\n\n setCurlirizeHandler,\n getCurlirizeHandler,\n setCurlirize,\n getCurlirize,\n\n setCreateProgressHandler,\n getCreateProgressHandler,\n setUpdateProgressHandler,\n getUpdateProgressHandler,\n setStopProgressHandler,\n getStopProgressHandler,\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"State.js","names":["__dirname","path","dirname","fileURLToPath","pkg","JSON","parse","fs","readFileSync","resolve","_state","authenticationHeaderOverrides","printHandler","message","console","dir","depth","log","verboseHandler","getVerbose","debugHandler","getDebug","curlirizeHandler","setHost","host","getHost","process","env","FRODO_HOST","setTenant","getTenant","setUsername","username","getUsername","FRODO_USERNAME","setPassword","password","getPassword","FRODO_PASSWORD","setRealm","realm","getRealm","FRODO_REALM","setDeploymentType","type","deploymentType","getDeploymentType","setAllowInsecureConnection","allowInsecureConnection","getAllowInsecureConnection","setCookieName","name","cookieName","getCookieName","setCookieValue","value","cookieValue","getCookieValue","setAuthenticationHeaderOverrides","overrides","getAuthenticationHeaderOverrides","setAuthenticationService","service","authenticationService","getAuthenticationService","FRODO_AUTHENTICATION_SERVICE","setServiceAccountId","uuid","serviceAccountId","getServiceAccountId","FRODO_SA_ID","setServiceAccountJwk","jwk","serviceAccountJwk","getServiceAccountJwk","FRODO_SA_JWK","undefined","setUseBearerTokenForAmApis","useBearerTokenForAmApis","getUseBearerTokenForAmApis","setBearerToken","token","bearerToken","getBearerToken","setLogApiKey","key","logApiKey","getLogApiKey","FRODO_LOG_KEY","setLogApiSecret","secret","logApiSecret","getLogApiSecret","FRODO_LOG_SECRET","setAmVersion","version","amVersion","getAmVersion","setFrodoVersion","frodoVersion","getFrodoVersion","setConnectionProfilesPath","connectionProfilesPath","getConnectionProfilesPath","setMasterKeyPath","masterKeyPath","getMasterKeyPath","setOutputFile","file","outputFile","getOutputFile","setDirectory","directory","getDirectory","setPrintHandler","handler","getPrintHandler","setVerboseHandler","getVerboseHandler","setVerbose","verbose","setDebugHandler","getDebugHandler","setDebug","debug","FRODO_DEBUG","setCurlirizeHandler","getCurlirizeHandler","setCurlirize","curlirize","getCurlirize","setCreateProgressHandler","createProgressHandler","getCreateProgressHandler","setUpdateProgressHandler","updateProgressHandler","getUpdateProgressHandler","setStopProgressHandler","stopProgressHandler","getStopProgressHandler","session"],"sources":["shared/State.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { JwkRsa } from '../ops/JoseOps';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../../package.json'), 'utf8')\n);\n\nexport interface StateInterface {\n // connection settings\n host?: string;\n username?: string;\n password?: string;\n realm?: string;\n deploymentType?: string;\n allowInsecureConnection?: boolean;\n // customize authentication\n authenticationHeaderOverrides?: Record<string, string>;\n authenticationService?: string;\n // cookie settings\n cookieName?: string;\n cookieValue?: string;\n // service account settings\n serviceAccountId?: string;\n serviceAccountJwk?: JwkRsa;\n // bearer token settings\n useBearerTokenForAmApis?: boolean;\n bearerToken?: string;\n // log api settings\n logApiKey?: string;\n logApiSecret?: string;\n // versions\n amVersion?: string;\n frodoVersion?: string;\n // miscellaneous settings\n connectionProfilesPath?: string;\n masterKeyPath?: string;\n outputFile?: string;\n directory?: string;\n // output handler settings\n printHandler?: (\n message: string | object,\n type?: string,\n newline?: boolean\n ) => void;\n verboseHandler?: (message: string | object) => void;\n verbose?: boolean;\n debugHandler?: (message: string | object) => void;\n debug?: boolean;\n curlirizeHandler?: (message: string) => void;\n curlirize?: boolean;\n createProgressHandler?: (\n type: string,\n total?: number,\n message?: string\n ) => void;\n updateProgressHandler?: (message: string) => void;\n stopProgressHandler?: (message: string, status?: string) => void;\n}\n\nconst _state: StateInterface = {\n authenticationHeaderOverrides: {},\n printHandler: (message: string | object) => {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else {\n console.log(message);\n }\n },\n verboseHandler: (message: string | object) => {\n if (!message) return;\n if (getVerbose()) {\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else {\n console.log(message);\n }\n }\n },\n debugHandler: (message: string | object) => {\n if (!message) return;\n if (getDebug()) {\n if (typeof message === 'object') {\n console.dir(message, { depth: 6 });\n } else {\n console.log(message);\n }\n }\n },\n curlirizeHandler: (message: string) => {\n if (!message) return;\n if (getDebug()) {\n console.log(message);\n }\n },\n};\n\nexport const setHost = (host: string) => (_state.host = host);\nexport const getHost = () => _state.host || process.env.FRODO_HOST;\n\n/**\n * @deprecated since v0.17.0 use `setHost(host: string)` instead\n */\nexport const setTenant = setHost;\n/**\n * @deprecated since v0.17.0 use `getHost` instead\n */\nexport const getTenant = getHost;\n\nexport const setUsername = (username: string) => (_state.username = username);\nexport const getUsername = () => _state.username || process.env.FRODO_USERNAME;\n\nexport const setPassword = (password: string) => (_state.password = password);\nexport const getPassword = () => _state.password || process.env.FRODO_PASSWORD;\n\nexport const setRealm = (realm: string) => (_state.realm = realm);\nexport const getRealm = () => _state.realm || process.env.FRODO_REALM;\n\nexport const setDeploymentType = (type: string) =>\n (_state.deploymentType = type);\nexport const getDeploymentType = () => _state.deploymentType;\n\nexport const setAllowInsecureConnection = (allowInsecureConnection: boolean) =>\n (_state.allowInsecureConnection = allowInsecureConnection);\nexport const getAllowInsecureConnection = () =>\n _state['allowInsecureConnection'];\n\nexport const setCookieName = (name: string) => (_state.cookieName = name);\nexport const getCookieName = () => _state.cookieName;\nexport const setCookieValue = (value: string) => (_state.cookieValue = value);\nexport const getCookieValue = () => _state.cookieValue;\n\nexport const setAuthenticationHeaderOverrides = (\n overrides: Record<string, string>\n) => (_state.authenticationHeaderOverrides = overrides);\nexport const getAuthenticationHeaderOverrides = () =>\n _state.authenticationHeaderOverrides;\nexport const setAuthenticationService = (service: string) =>\n (_state.authenticationService = service);\nexport const getAuthenticationService = () =>\n _state.authenticationService || process.env.FRODO_AUTHENTICATION_SERVICE;\n\nexport const setServiceAccountId = (uuid: string) =>\n (_state.serviceAccountId = uuid);\nexport const getServiceAccountId = (): string =>\n _state.serviceAccountId || process.env.FRODO_SA_ID;\nexport const setServiceAccountJwk = (jwk: JwkRsa) =>\n (_state.serviceAccountJwk = { ...jwk });\nexport const getServiceAccountJwk = (): JwkRsa =>\n _state.serviceAccountJwk ||\n (process.env.FRODO_SA_JWK ? JSON.parse(process.env.FRODO_SA_JWK) : undefined);\n\nexport const setUseBearerTokenForAmApis = (useBearerTokenForAmApis: boolean) =>\n (_state.useBearerTokenForAmApis = useBearerTokenForAmApis);\nexport const getUseBearerTokenForAmApis = () => _state.useBearerTokenForAmApis;\nexport const setBearerToken = (token: string) => (_state.bearerToken = token);\nexport const getBearerToken = () => _state.bearerToken;\n\nexport const setLogApiKey = (key: string) => (_state.logApiKey = key);\nexport const getLogApiKey = () => _state.logApiKey || process.env.FRODO_LOG_KEY;\nexport const setLogApiSecret = (secret: string) =>\n (_state.logApiSecret = secret);\nexport const getLogApiSecret = () =>\n _state.logApiSecret || process.env.FRODO_LOG_SECRET;\n\nexport const setAmVersion = (version: string) => (_state.amVersion = version);\nexport const getAmVersion = () => _state.amVersion;\n\nexport const setFrodoVersion = (version: string) =>\n (_state.frodoVersion = version);\nexport const getFrodoVersion = () =>\n _state.frodoVersion || `v${pkg.version} [${process.version}]`;\n\nexport const setConnectionProfilesPath = (path: string) =>\n (_state.connectionProfilesPath = path);\nexport const getConnectionProfilesPath = () => _state.connectionProfilesPath;\n\nexport const setMasterKeyPath = (path: string) => (_state.masterKeyPath = path);\nexport const getMasterKeyPath = () => _state.masterKeyPath;\n\nexport const setOutputFile = (file: string) => (_state.outputFile = file);\nexport const getOutputFile = () => _state.outputFile;\n\nexport const setDirectory = (directory: string) =>\n (_state.directory = directory);\nexport const getDirectory = () => _state.directory;\n\nexport const setPrintHandler = (\n handler: (message: string | object, type?: string, newline?: boolean) => void\n) => (_state.printHandler = handler);\nexport const getPrintHandler = () => _state.printHandler;\n\nexport const setVerboseHandler = (\n handler: (message: string | object) => void\n) => (_state.verboseHandler = handler);\nexport const getVerboseHandler = () => _state.verboseHandler;\nexport const setVerbose = (verbose: boolean) => (_state.verbose = verbose);\nexport const getVerbose = (): boolean => _state.verbose;\n\nexport const setDebugHandler = (handler: (message: string | object) => void) =>\n (_state.debugHandler = handler);\nexport const getDebugHandler = () => _state.debugHandler;\nexport const setDebug = (debug: boolean) => (_state.debug = debug);\nexport const getDebug = (): boolean =>\n _state.debug || process.env.FRODO_DEBUG !== undefined;\n\nexport const setCurlirizeHandler = (handler: (message: string) => void) =>\n (_state.curlirizeHandler = handler);\nexport const getCurlirizeHandler = () => _state.curlirizeHandler;\nexport const setCurlirize = (curlirize: boolean) =>\n (_state.curlirize = curlirize);\nexport const getCurlirize = (): boolean => _state.curlirize;\n\nexport const setCreateProgressHandler = (\n handler: (type: string, total?: number, message?: string) => void\n) => (_state.createProgressHandler = handler);\nexport const getCreateProgressHandler = () => _state.createProgressHandler;\nexport const setUpdateProgressHandler = (handler: (message: string) => void) =>\n (_state.updateProgressHandler = handler);\nexport const getUpdateProgressHandler = () => _state.updateProgressHandler;\nexport const setStopProgressHandler = (\n handler: (message: string, status?: string) => void\n) => (_state.stopProgressHandler = handler);\nexport const getStopProgressHandler = () => _state.stopProgressHandler;\n\n/**\n * @deprecated since version v0.17.0. Import state:\n *\n * ```import { state } from '@rockcarver/frodo-lib';```\n *\n * then call functions:\n *\n * ```const username = state.getUsername();```\n */\nexport default {\n session: {\n setHost,\n getHost,\n\n setTenant,\n getTenant,\n\n setUsername,\n getUsername,\n\n setPassword,\n getPassword,\n\n setRealm,\n getRealm,\n\n setDeploymentType,\n getDeploymentType,\n\n setAllowInsecureConnection,\n getAllowInsecureConnection,\n\n setCookieName,\n getCookieName,\n setCookieValue,\n getCookieValue,\n\n setAuthenticationHeaderOverrides,\n getAuthenticationHeaderOverrides,\n setAuthenticationService,\n getAuthenticationService,\n\n setServiceAccountId,\n getServiceAccountId,\n setServiceAccountJwk,\n getServiceAccountJwk,\n\n setUseBearerTokenForAmApis,\n getUseBearerTokenForAmApis,\n setBearerToken,\n getBearerToken,\n\n setLogApiKey,\n getLogApiKey,\n setLogApiSecret,\n getLogApiSecret,\n\n setAmVersion,\n getAmVersion,\n\n setFrodoVersion,\n getFrodoVersion,\n\n setConnectionProfilesPath,\n getConnectionProfilesPath,\n\n setMasterKeyPath,\n getMasterKeyPath,\n\n setOutputFile,\n getOutputFile,\n\n setDirectory,\n getDirectory,\n\n setPrintHandler,\n getPrintHandler,\n\n setVerboseHandler,\n getVerboseHandler,\n setVerbose,\n getVerbose,\n\n setDebugHandler,\n getDebugHandler,\n setDebug,\n getDebug,\n\n setCurlirizeHandler,\n getCurlirizeHandler,\n setCurlirize,\n getCurlirize,\n\n setCreateProgressHandler,\n getCreateProgressHandler,\n setUpdateProgressHandler,\n getUpdateProgressHandler,\n setStopProgressHandler,\n getStopProgressHandler,\n },\n};\n"],"mappings":"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"}
@@ -119,7 +119,8 @@ function _scheduleShutdown() {
119
119
  }
120
120
  function getFrodoCommand() {
121
121
  try {
122
- if (!process.argv[1].endsWith('frodo') && !process.argv[1].endsWith('frodo.exe')) {
122
+ if (mode !== _utils.MODES.RECORD) (0, _Console.debugMessage)("SetupPollyForFrodoLib.getFrodoCommand: process.argv=".concat(process.argv));
123
+ if (!process.argv[1].endsWith('frodo') && !process.argv[1].endsWith('frodo.exe') && !process.argv[1].endsWith('app.js')) {
123
124
  return _path.default.parse(process.argv[1]).name.replace('-', '/');
124
125
  }
125
126
  return process.argv[2];
@@ -1 +1 @@
1
- {"version":3,"file":"SetupPollyForFrodoLib.js","names":["__dirname","path","dirname","fileURLToPath","FRODO_MOCK_HOSTS","recordIfMissing","mode","MODES","REPLAY","recordingsDir","replace","process","env","FRODO_MOCK","Polly","register","NodeHttpAdapter","FSPersister","RECORD","defaultMatchRequestsBy","JSON","parse","stringify","method","headers","body","order","url","protocol","username","password","hostname","port","pathname","query","hash","authenticationMatchRequestsBy","matchRequestsBy","delay","ms","Promise","resolve","setTimeout","countdown","ttl","timeout","scheduleShutdown","polly","console","log","getFrodoCommand","stop","argv","endsWith","name","error","printMessage","setupPollyForFrodoLib","configure","adapters","flushRequestsOnStop","logLevel","FRODO_POLLY_LOG_LEVEL","recordFailedRequests","persister","persisterOptions","fs","host","server","any","recordingName","on","req","debugMessage","config"],"sources":["utils/SetupPollyForFrodoLib.ts"],"sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\nimport { Polly } from '@pollyjs/core';\nimport { MODES } from '@pollyjs/utils';\nimport NodeHttpAdapter from '@pollyjs/adapter-node-http';\nimport FSPersister from '@pollyjs/persister-fs';\nimport { LogLevelDesc } from 'loglevel';\nimport { debugMessage, printMessage } from '../ops/utils/Console';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst FRODO_MOCK_HOSTS = [\n 'https://openam-frodo-dev.forgeblocks.com',\n 'https://openam-service-accounts.forgeblocks.com',\n 'https://openam-volker-dev.forgeblocks.com',\n];\n\nlet recordIfMissing = false;\nlet mode = MODES.REPLAY;\n\n// resolve \"/home/sandeepc/work/ForgeRock/sources/frodo-lib/esm/api\" to\n// \"/home/sandeepc/work/ForgeRock/sources/frodo-lib/src/test/recordings\"\nconst recordingsDir = __dirname.replace(\n /^(.*\\/frodo-\\w{3})(.*)$/gi,\n '$1/mocks'\n);\n\nif (process.env.FRODO_MOCK) {\n Polly.register(NodeHttpAdapter);\n Polly.register(FSPersister);\n if (process.env.FRODO_MOCK === 'record') {\n mode = MODES.RECORD;\n recordIfMissing = true;\n }\n}\n\nfunction defaultMatchRequestsBy() {\n return JSON.parse(\n JSON.stringify({\n method: true,\n headers: false, // do not match headers, because \"Authorization\" header is sent only at recording time\n body: true,\n order: false,\n url: {\n protocol: false,\n username: false,\n password: false,\n hostname: false, // we will record from different envs but run tests always against `frodo-dev`\n port: false,\n pathname: true,\n query: true,\n hash: true,\n },\n })\n );\n}\n\nfunction authenticationMatchRequestsBy() {\n const matchRequestsBy = defaultMatchRequestsBy();\n matchRequestsBy.body = false;\n matchRequestsBy.order = true;\n return matchRequestsBy;\n}\n\n// returns a delayed promise\nasync function delay(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function countdown(ms) {\n await delay(ms);\n return --ttl;\n}\n\nconst timeout = 15;\nlet ttl = timeout;\nasync function scheduleShutdown(polly: Polly) {\n ++ttl;\n while (await countdown(1000)) {\n if (ttl < 4)\n console.log(\n `Polly instance '${getFrodoCommand()}' stopping in ${ttl}s...`\n );\n }\n await polly.stop();\n console.log(`Polly instance '${getFrodoCommand()}' stopped.`);\n}\n\n/*\nargv:\n[\n '/Users/vscheuber/.nvm/versions/node/v18.7.0/bin/node',\n '/usr/local/bin/frodo',\n 'journey',\n 'list',\n '-l',\n 'https://openam-volker-dev.forgeblocks.com/am',\n 'alpha',\n 'volker.scheuber@forgerock.com',\n 'Sup3rS3cr3t!'\n]\nargv:\n[\n '/Users/vscheuber/.nvm/versions/node/v18.7.0/bin/node',\n '/Users/vscheuber/Projects/frodo-cli/esm/cli/journey/journey-list.js',\n '-l',\n 'https://openam-volker-dev.forgeblocks.com/am',\n 'alpha',\n 'volker.scheuber@forgerock.com',\n 'Sup3rS3cr3t!'\n]\n*/\nfunction getFrodoCommand() {\n try {\n if (\n !process.argv[1].endsWith('frodo') &&\n !process.argv[1].endsWith('frodo.exe')\n ) {\n return path.parse(process.argv[1]).name.replace('-', '/');\n }\n return process.argv[2];\n } catch (error) {\n printMessage(`SetupPollyForFrodoLib.getFrodoCommand: ${error}`, 'error');\n printMessage(process.argv, 'error');\n return 'error';\n }\n}\n\nexport function setupPollyForFrodoLib(\n matchRequestsBy = defaultMatchRequestsBy()\n): Polly {\n const polly = new Polly('default');\n\n polly.configure({\n adapters: ['node-http'],\n mode,\n recordIfMissing,\n flushRequestsOnStop: true,\n logLevel: (process.env.FRODO_POLLY_LOG_LEVEL as LogLevelDesc) || 'warn',\n recordFailedRequests: true,\n persister: 'fs',\n persisterOptions: {\n fs: {\n recordingsDir,\n },\n },\n matchRequestsBy,\n });\n\n for (const host of FRODO_MOCK_HOSTS) {\n if (mode === MODES.RECORD) console.log(`***** Host: ${host}`);\n polly.server.host(host, () => {\n polly.server\n .any('/am/oauth2/*')\n .recordingName(`${getFrodoCommand()}/oauth2`)\n .on('request', (req) => {\n req.configure({ matchRequestsBy: authenticationMatchRequestsBy() });\n });\n polly.server.any('/am/json/*').recordingName(`${getFrodoCommand()}/am`);\n polly.server\n .any('/openidm/*')\n .recordingName(`${getFrodoCommand()}/openidm`);\n polly.server\n .any('/environment/*')\n .recordingName(`${getFrodoCommand()}/environment`);\n polly.server\n .any('/monitoring/*')\n .recordingName(`${getFrodoCommand()}/monitoring`);\n polly.server\n .any('/feature')\n .recordingName(`${getFrodoCommand()}/feature`);\n polly.server\n .any('/dashboard/*')\n .recordingName(`${getFrodoCommand()}/dashboard`);\n });\n }\n polly.server.host('https://api.github.com', () => {\n polly.server.any('/*').recordingName(`github`);\n });\n polly.server.host('https://registry.npmjs.org', () => {\n polly.server.any('/*').recordingName(`npmjs`);\n });\n polly.server.any().on('request', () => {\n if (ttl < timeout) {\n // console.log(`Reset polly stop ttl (${ttl}) to ${timeout}`);\n ttl = timeout;\n }\n });\n\n if (mode === MODES.RECORD) {\n scheduleShutdown(polly);\n } else {\n // only output debug messages if not recording as this polly instance is\n // primarily used by frodo-cli e2e tests, which capture stdout in snapshots.\n // debug messages falsify the snapshot recordings.\n debugMessage(`Polly config:`);\n debugMessage(polly.config);\n }\n\n return polly;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SetupPollyForFrodoLib.js","names":["__dirname","path","dirname","fileURLToPath","FRODO_MOCK_HOSTS","recordIfMissing","mode","MODES","REPLAY","recordingsDir","replace","process","env","FRODO_MOCK","Polly","register","NodeHttpAdapter","FSPersister","RECORD","defaultMatchRequestsBy","JSON","parse","stringify","method","headers","body","order","url","protocol","username","password","hostname","port","pathname","query","hash","authenticationMatchRequestsBy","matchRequestsBy","delay","ms","Promise","resolve","setTimeout","countdown","ttl","timeout","scheduleShutdown","polly","console","log","getFrodoCommand","stop","debugMessage","argv","endsWith","name","error","printMessage","setupPollyForFrodoLib","configure","adapters","flushRequestsOnStop","logLevel","FRODO_POLLY_LOG_LEVEL","recordFailedRequests","persister","persisterOptions","fs","host","server","any","recordingName","on","req","config"],"sources":["utils/SetupPollyForFrodoLib.ts"],"sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\nimport { Polly } from '@pollyjs/core';\nimport { MODES } from '@pollyjs/utils';\nimport NodeHttpAdapter from '@pollyjs/adapter-node-http';\nimport FSPersister from '@pollyjs/persister-fs';\nimport { LogLevelDesc } from 'loglevel';\nimport { debugMessage, printMessage } from '../ops/utils/Console';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst FRODO_MOCK_HOSTS = [\n 'https://openam-frodo-dev.forgeblocks.com',\n 'https://openam-service-accounts.forgeblocks.com',\n 'https://openam-volker-dev.forgeblocks.com',\n];\n\nlet recordIfMissing = false;\nlet mode = MODES.REPLAY;\n\n// resolve \"/home/sandeepc/work/ForgeRock/sources/frodo-lib/esm/api\" to\n// \"/home/sandeepc/work/ForgeRock/sources/frodo-lib/src/test/recordings\"\nconst recordingsDir = __dirname.replace(\n /^(.*\\/frodo-\\w{3})(.*)$/gi,\n '$1/mocks'\n);\n\nif (process.env.FRODO_MOCK) {\n Polly.register(NodeHttpAdapter);\n Polly.register(FSPersister);\n if (process.env.FRODO_MOCK === 'record') {\n mode = MODES.RECORD;\n recordIfMissing = true;\n }\n}\n\nfunction defaultMatchRequestsBy() {\n return JSON.parse(\n JSON.stringify({\n method: true,\n headers: false, // do not match headers, because \"Authorization\" header is sent only at recording time\n body: true,\n order: false,\n url: {\n protocol: false,\n username: false,\n password: false,\n hostname: false, // we will record from different envs but run tests always against `frodo-dev`\n port: false,\n pathname: true,\n query: true,\n hash: true,\n },\n })\n );\n}\n\nfunction authenticationMatchRequestsBy() {\n const matchRequestsBy = defaultMatchRequestsBy();\n matchRequestsBy.body = false;\n matchRequestsBy.order = true;\n return matchRequestsBy;\n}\n\n// returns a delayed promise\nasync function delay(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function countdown(ms) {\n await delay(ms);\n return --ttl;\n}\n\nconst timeout = 15;\nlet ttl = timeout;\nasync function scheduleShutdown(polly: Polly) {\n ++ttl;\n while (await countdown(1000)) {\n if (ttl < 4)\n console.log(\n `Polly instance '${getFrodoCommand()}' stopping in ${ttl}s...`\n );\n }\n await polly.stop();\n console.log(`Polly instance '${getFrodoCommand()}' stopped.`);\n}\n\n/*\nargv:\n[\n '/Users/vscheuber/.nvm/versions/node/v18.7.0/bin/node',\n '/usr/local/bin/frodo',\n 'journey',\n 'list',\n '-l',\n 'https://openam-volker-dev.forgeblocks.com/am',\n 'alpha',\n 'volker.scheuber@forgerock.com',\n 'Sup3rS3cr3t!'\n]\nargv:\n[\n '/Users/vscheuber/.nvm/versions/node/v18.7.0/bin/node',\n '/Users/vscheuber/Projects/frodo-cli/esm/cli/journey/journey-list.js',\n '-l',\n 'https://openam-volker-dev.forgeblocks.com/am',\n 'alpha',\n 'volker.scheuber@forgerock.com',\n 'Sup3rS3cr3t!'\n]\n*/\nfunction getFrodoCommand() {\n try {\n if (mode !== MODES.RECORD)\n debugMessage(\n `SetupPollyForFrodoLib.getFrodoCommand: process.argv=${process.argv}`\n );\n if (\n !process.argv[1].endsWith('frodo') &&\n !process.argv[1].endsWith('frodo.exe') &&\n !process.argv[1].endsWith('app.js')\n ) {\n return path.parse(process.argv[1]).name.replace('-', '/');\n }\n return process.argv[2];\n } catch (error) {\n printMessage(`SetupPollyForFrodoLib.getFrodoCommand: ${error}`, 'error');\n printMessage(process.argv, 'error');\n return 'error';\n }\n}\n\nexport function setupPollyForFrodoLib(\n matchRequestsBy = defaultMatchRequestsBy()\n): Polly {\n const polly = new Polly('default');\n\n polly.configure({\n adapters: ['node-http'],\n mode,\n recordIfMissing,\n flushRequestsOnStop: true,\n logLevel: (process.env.FRODO_POLLY_LOG_LEVEL as LogLevelDesc) || 'warn',\n recordFailedRequests: true,\n persister: 'fs',\n persisterOptions: {\n fs: {\n recordingsDir,\n },\n },\n matchRequestsBy,\n });\n\n for (const host of FRODO_MOCK_HOSTS) {\n if (mode === MODES.RECORD) console.log(`***** Host: ${host}`);\n polly.server.host(host, () => {\n polly.server\n .any('/am/oauth2/*')\n .recordingName(`${getFrodoCommand()}/oauth2`)\n .on('request', (req) => {\n req.configure({ matchRequestsBy: authenticationMatchRequestsBy() });\n });\n polly.server.any('/am/json/*').recordingName(`${getFrodoCommand()}/am`);\n polly.server\n .any('/openidm/*')\n .recordingName(`${getFrodoCommand()}/openidm`);\n polly.server\n .any('/environment/*')\n .recordingName(`${getFrodoCommand()}/environment`);\n polly.server\n .any('/monitoring/*')\n .recordingName(`${getFrodoCommand()}/monitoring`);\n polly.server\n .any('/feature')\n .recordingName(`${getFrodoCommand()}/feature`);\n polly.server\n .any('/dashboard/*')\n .recordingName(`${getFrodoCommand()}/dashboard`);\n });\n }\n polly.server.host('https://api.github.com', () => {\n polly.server.any('/*').recordingName(`github`);\n });\n polly.server.host('https://registry.npmjs.org', () => {\n polly.server.any('/*').recordingName(`npmjs`);\n });\n polly.server.any().on('request', () => {\n if (ttl < timeout) {\n // console.log(`Reset polly stop ttl (${ttl}) to ${timeout}`);\n ttl = timeout;\n }\n });\n\n if (mode === MODES.RECORD) {\n scheduleShutdown(polly);\n } else {\n // only output debug messages if not recording as this polly instance is\n // primarily used by frodo-cli e2e tests, which capture stdout in snapshots.\n // debug messages falsify the snapshot recordings.\n debugMessage(`Polly config:`);\n debugMessage(polly.config);\n }\n\n return polly;\n}\n"],"mappings":"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"}
@@ -93,7 +93,8 @@ argv:
93
93
  */
94
94
  function getFrodoCommand() {
95
95
  try {
96
- if (!process.argv[1].endsWith('frodo') && !process.argv[1].endsWith('frodo.exe')) {
96
+ if (mode !== MODES.RECORD) debugMessage(`SetupPollyForFrodoLib.getFrodoCommand: process.argv=${process.argv}`);
97
+ if (!process.argv[1].endsWith('frodo') && !process.argv[1].endsWith('frodo.exe') && !process.argv[1].endsWith('app.js')) {
97
98
  return path.parse(process.argv[1]).name.replace('-', '/');
98
99
  }
99
100
  return process.argv[2];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-lib",
3
- "version": "0.18.5",
3
+ "version": "0.18.8",
4
4
  "type": "commonjs",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.mjs",
@@ -114,7 +114,7 @@
114
114
  "fs-extra": "^10.0.0",
115
115
  "https-proxy-agent": "^5.0.1",
116
116
  "lodash": "^4.17.21",
117
- "node-jose": "^2.1.1",
117
+ "node-jose": "^2.2.0",
118
118
  "properties-reader": "^2.2.0",
119
119
  "qs": "^6.10.3",
120
120
  "readline-sync": "^1.4.10",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/SetupPollyForFrodoLib.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AA8HtC,wBAAgB,qBAAqB,CACnC,eAAe,MAA2B,GACzC,KAAK,CAsEP","file":"SetupPollyForFrodoLib.d.ts","sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\nimport { Polly } from '@pollyjs/core';\nimport { MODES } from '@pollyjs/utils';\nimport NodeHttpAdapter from '@pollyjs/adapter-node-http';\nimport FSPersister from '@pollyjs/persister-fs';\nimport { LogLevelDesc } from 'loglevel';\nimport { debugMessage, printMessage } from '../ops/utils/Console';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst FRODO_MOCK_HOSTS = [\n 'https://openam-frodo-dev.forgeblocks.com',\n 'https://openam-service-accounts.forgeblocks.com',\n 'https://openam-volker-dev.forgeblocks.com',\n];\n\nlet recordIfMissing = false;\nlet mode = MODES.REPLAY;\n\n// resolve \"/home/sandeepc/work/ForgeRock/sources/frodo-lib/esm/api\" to\n// \"/home/sandeepc/work/ForgeRock/sources/frodo-lib/src/test/recordings\"\nconst recordingsDir = __dirname.replace(\n /^(.*\\/frodo-\\w{3})(.*)$/gi,\n '$1/mocks'\n);\n\nif (process.env.FRODO_MOCK) {\n Polly.register(NodeHttpAdapter);\n Polly.register(FSPersister);\n if (process.env.FRODO_MOCK === 'record') {\n mode = MODES.RECORD;\n recordIfMissing = true;\n }\n}\n\nfunction defaultMatchRequestsBy() {\n return JSON.parse(\n JSON.stringify({\n method: true,\n headers: false, // do not match headers, because \"Authorization\" header is sent only at recording time\n body: true,\n order: false,\n url: {\n protocol: false,\n username: false,\n password: false,\n hostname: false, // we will record from different envs but run tests always against `frodo-dev`\n port: false,\n pathname: true,\n query: true,\n hash: true,\n },\n })\n );\n}\n\nfunction authenticationMatchRequestsBy() {\n const matchRequestsBy = defaultMatchRequestsBy();\n matchRequestsBy.body = false;\n matchRequestsBy.order = true;\n return matchRequestsBy;\n}\n\n// returns a delayed promise\nasync function delay(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function countdown(ms) {\n await delay(ms);\n return --ttl;\n}\n\nconst timeout = 15;\nlet ttl = timeout;\nasync function scheduleShutdown(polly: Polly) {\n ++ttl;\n while (await countdown(1000)) {\n if (ttl < 4)\n console.log(\n `Polly instance '${getFrodoCommand()}' stopping in ${ttl}s...`\n );\n }\n await polly.stop();\n console.log(`Polly instance '${getFrodoCommand()}' stopped.`);\n}\n\n/*\nargv:\n[\n '/Users/vscheuber/.nvm/versions/node/v18.7.0/bin/node',\n '/usr/local/bin/frodo',\n 'journey',\n 'list',\n '-l',\n 'https://openam-volker-dev.forgeblocks.com/am',\n 'alpha',\n 'volker.scheuber@forgerock.com',\n 'Sup3rS3cr3t!'\n]\nargv:\n[\n '/Users/vscheuber/.nvm/versions/node/v18.7.0/bin/node',\n '/Users/vscheuber/Projects/frodo-cli/esm/cli/journey/journey-list.js',\n '-l',\n 'https://openam-volker-dev.forgeblocks.com/am',\n 'alpha',\n 'volker.scheuber@forgerock.com',\n 'Sup3rS3cr3t!'\n]\n*/\nfunction getFrodoCommand() {\n try {\n if (\n !process.argv[1].endsWith('frodo') &&\n !process.argv[1].endsWith('frodo.exe')\n ) {\n return path.parse(process.argv[1]).name.replace('-', '/');\n }\n return process.argv[2];\n } catch (error) {\n printMessage(`SetupPollyForFrodoLib.getFrodoCommand: ${error}`, 'error');\n printMessage(process.argv, 'error');\n return 'error';\n }\n}\n\nexport function setupPollyForFrodoLib(\n matchRequestsBy = defaultMatchRequestsBy()\n): Polly {\n const polly = new Polly('default');\n\n polly.configure({\n adapters: ['node-http'],\n mode,\n recordIfMissing,\n flushRequestsOnStop: true,\n logLevel: (process.env.FRODO_POLLY_LOG_LEVEL as LogLevelDesc) || 'warn',\n recordFailedRequests: true,\n persister: 'fs',\n persisterOptions: {\n fs: {\n recordingsDir,\n },\n },\n matchRequestsBy,\n });\n\n for (const host of FRODO_MOCK_HOSTS) {\n if (mode === MODES.RECORD) console.log(`***** Host: ${host}`);\n polly.server.host(host, () => {\n polly.server\n .any('/am/oauth2/*')\n .recordingName(`${getFrodoCommand()}/oauth2`)\n .on('request', (req) => {\n req.configure({ matchRequestsBy: authenticationMatchRequestsBy() });\n });\n polly.server.any('/am/json/*').recordingName(`${getFrodoCommand()}/am`);\n polly.server\n .any('/openidm/*')\n .recordingName(`${getFrodoCommand()}/openidm`);\n polly.server\n .any('/environment/*')\n .recordingName(`${getFrodoCommand()}/environment`);\n polly.server\n .any('/monitoring/*')\n .recordingName(`${getFrodoCommand()}/monitoring`);\n polly.server\n .any('/feature')\n .recordingName(`${getFrodoCommand()}/feature`);\n polly.server\n .any('/dashboard/*')\n .recordingName(`${getFrodoCommand()}/dashboard`);\n });\n }\n polly.server.host('https://api.github.com', () => {\n polly.server.any('/*').recordingName(`github`);\n });\n polly.server.host('https://registry.npmjs.org', () => {\n polly.server.any('/*').recordingName(`npmjs`);\n });\n polly.server.any().on('request', () => {\n if (ttl < timeout) {\n // console.log(`Reset polly stop ttl (${ttl}) to ${timeout}`);\n ttl = timeout;\n }\n });\n\n if (mode === MODES.RECORD) {\n scheduleShutdown(polly);\n } else {\n // only output debug messages if not recording as this polly instance is\n // primarily used by frodo-cli e2e tests, which capture stdout in snapshots.\n // debug messages falsify the snapshot recordings.\n debugMessage(`Polly config:`);\n debugMessage(polly.config);\n }\n\n return polly;\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/SetupPollyForFrodoLib.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAmItC,wBAAgB,qBAAqB,CACnC,eAAe,MAA2B,GACzC,KAAK,CAsEP","file":"SetupPollyForFrodoLib.d.ts","sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\nimport { Polly } from '@pollyjs/core';\nimport { MODES } from '@pollyjs/utils';\nimport NodeHttpAdapter from '@pollyjs/adapter-node-http';\nimport FSPersister from '@pollyjs/persister-fs';\nimport { LogLevelDesc } from 'loglevel';\nimport { debugMessage, printMessage } from '../ops/utils/Console';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst FRODO_MOCK_HOSTS = [\n 'https://openam-frodo-dev.forgeblocks.com',\n 'https://openam-service-accounts.forgeblocks.com',\n 'https://openam-volker-dev.forgeblocks.com',\n];\n\nlet recordIfMissing = false;\nlet mode = MODES.REPLAY;\n\n// resolve \"/home/sandeepc/work/ForgeRock/sources/frodo-lib/esm/api\" to\n// \"/home/sandeepc/work/ForgeRock/sources/frodo-lib/src/test/recordings\"\nconst recordingsDir = __dirname.replace(\n /^(.*\\/frodo-\\w{3})(.*)$/gi,\n '$1/mocks'\n);\n\nif (process.env.FRODO_MOCK) {\n Polly.register(NodeHttpAdapter);\n Polly.register(FSPersister);\n if (process.env.FRODO_MOCK === 'record') {\n mode = MODES.RECORD;\n recordIfMissing = true;\n }\n}\n\nfunction defaultMatchRequestsBy() {\n return JSON.parse(\n JSON.stringify({\n method: true,\n headers: false, // do not match headers, because \"Authorization\" header is sent only at recording time\n body: true,\n order: false,\n url: {\n protocol: false,\n username: false,\n password: false,\n hostname: false, // we will record from different envs but run tests always against `frodo-dev`\n port: false,\n pathname: true,\n query: true,\n hash: true,\n },\n })\n );\n}\n\nfunction authenticationMatchRequestsBy() {\n const matchRequestsBy = defaultMatchRequestsBy();\n matchRequestsBy.body = false;\n matchRequestsBy.order = true;\n return matchRequestsBy;\n}\n\n// returns a delayed promise\nasync function delay(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function countdown(ms) {\n await delay(ms);\n return --ttl;\n}\n\nconst timeout = 15;\nlet ttl = timeout;\nasync function scheduleShutdown(polly: Polly) {\n ++ttl;\n while (await countdown(1000)) {\n if (ttl < 4)\n console.log(\n `Polly instance '${getFrodoCommand()}' stopping in ${ttl}s...`\n );\n }\n await polly.stop();\n console.log(`Polly instance '${getFrodoCommand()}' stopped.`);\n}\n\n/*\nargv:\n[\n '/Users/vscheuber/.nvm/versions/node/v18.7.0/bin/node',\n '/usr/local/bin/frodo',\n 'journey',\n 'list',\n '-l',\n 'https://openam-volker-dev.forgeblocks.com/am',\n 'alpha',\n 'volker.scheuber@forgerock.com',\n 'Sup3rS3cr3t!'\n]\nargv:\n[\n '/Users/vscheuber/.nvm/versions/node/v18.7.0/bin/node',\n '/Users/vscheuber/Projects/frodo-cli/esm/cli/journey/journey-list.js',\n '-l',\n 'https://openam-volker-dev.forgeblocks.com/am',\n 'alpha',\n 'volker.scheuber@forgerock.com',\n 'Sup3rS3cr3t!'\n]\n*/\nfunction getFrodoCommand() {\n try {\n if (mode !== MODES.RECORD)\n debugMessage(\n `SetupPollyForFrodoLib.getFrodoCommand: process.argv=${process.argv}`\n );\n if (\n !process.argv[1].endsWith('frodo') &&\n !process.argv[1].endsWith('frodo.exe') &&\n !process.argv[1].endsWith('app.js')\n ) {\n return path.parse(process.argv[1]).name.replace('-', '/');\n }\n return process.argv[2];\n } catch (error) {\n printMessage(`SetupPollyForFrodoLib.getFrodoCommand: ${error}`, 'error');\n printMessage(process.argv, 'error');\n return 'error';\n }\n}\n\nexport function setupPollyForFrodoLib(\n matchRequestsBy = defaultMatchRequestsBy()\n): Polly {\n const polly = new Polly('default');\n\n polly.configure({\n adapters: ['node-http'],\n mode,\n recordIfMissing,\n flushRequestsOnStop: true,\n logLevel: (process.env.FRODO_POLLY_LOG_LEVEL as LogLevelDesc) || 'warn',\n recordFailedRequests: true,\n persister: 'fs',\n persisterOptions: {\n fs: {\n recordingsDir,\n },\n },\n matchRequestsBy,\n });\n\n for (const host of FRODO_MOCK_HOSTS) {\n if (mode === MODES.RECORD) console.log(`***** Host: ${host}`);\n polly.server.host(host, () => {\n polly.server\n .any('/am/oauth2/*')\n .recordingName(`${getFrodoCommand()}/oauth2`)\n .on('request', (req) => {\n req.configure({ matchRequestsBy: authenticationMatchRequestsBy() });\n });\n polly.server.any('/am/json/*').recordingName(`${getFrodoCommand()}/am`);\n polly.server\n .any('/openidm/*')\n .recordingName(`${getFrodoCommand()}/openidm`);\n polly.server\n .any('/environment/*')\n .recordingName(`${getFrodoCommand()}/environment`);\n polly.server\n .any('/monitoring/*')\n .recordingName(`${getFrodoCommand()}/monitoring`);\n polly.server\n .any('/feature')\n .recordingName(`${getFrodoCommand()}/feature`);\n polly.server\n .any('/dashboard/*')\n .recordingName(`${getFrodoCommand()}/dashboard`);\n });\n }\n polly.server.host('https://api.github.com', () => {\n polly.server.any('/*').recordingName(`github`);\n });\n polly.server.host('https://registry.npmjs.org', () => {\n polly.server.any('/*').recordingName(`npmjs`);\n });\n polly.server.any().on('request', () => {\n if (ttl < timeout) {\n // console.log(`Reset polly stop ttl (${ttl}) to ${timeout}`);\n ttl = timeout;\n }\n });\n\n if (mode === MODES.RECORD) {\n scheduleShutdown(polly);\n } else {\n // only output debug messages if not recording as this polly instance is\n // primarily used by frodo-cli e2e tests, which capture stdout in snapshots.\n // debug messages falsify the snapshot recordings.\n debugMessage(`Polly config:`);\n debugMessage(polly.config);\n }\n\n return polly;\n}\n"]}