@rockcarver/frodo-lib 0.19.2 → 1.0.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ops/cloud/AdminFederationOps.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,6BAA6B,EAC7B,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,8BAA8B;IAC7C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IACtD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACxC;AAgBD;;;GAGG;AACH,wBAAsB,2BAA2B,iBAGhD;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,UAAU,KAAA,gBAe1D;AAED,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,gBAsCrB;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,8BAA8B,CAAC,CAoBzC;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,8BAA8B,CAAC,CA0B9F;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,8BAA8B,GACzC,OAAO,CAAC,iBAAiB,CAAC,CA8B5B;AAED;;;GAGG;AACH,wBAAsB,kCAAkC,CACtD,UAAU,EAAE,8BAA8B,GACzC,OAAO,CAAC,iBAAiB,CAAC,CA4B5B;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,8BAA8B,GACzC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA8B9B","file":"AdminFederationOps.d.ts","sourcesContent":["import {\n deleteProviderByTypeAndId,\n getAdminFederationProviders as _getAdminFederationProviders,\n putProviderByTypeAndId as _putProviderByTypeAndId,\n} from '../../api/cloud/AdminFederationProvidersApi';\nimport { ExportMetaData } from '../OpsTypes';\nimport {\n AdminFederationConfigSkeleton,\n SocialIdpSkeleton,\n} from '../../api/ApiTypes';\nimport { getMetadata } from '../utils/ExportImportUtils';\nimport { debugMessage } from '../utils/Console';\nimport { getConfigEntity, putConfigEntity } from '../../api/IdmConfigApi';\n\nexport interface AdminFederationExportInterface {\n meta?: ExportMetaData;\n config: Record<string, AdminFederationConfigSkeleton>;\n idp: Record<string, SocialIdpSkeleton>;\n}\n\nconst ADMIN_FED_CONFIG_ID_PREFIX = 'fidc/federation-';\n\n/**\n * Create an empty idp export template\n * @returns {AdminFederationExportInterface} an empty idp export template\n */\nfunction createAdminFederationExportTemplate(): AdminFederationExportInterface {\n return {\n meta: getMetadata(),\n config: {},\n idp: {},\n } as AdminFederationExportInterface;\n}\n\n/**\n * Get all admin federation providers\n * @returns {Promise} a promise that resolves to an object containing an array of admin federation providers\n */\nexport async function getAdminFederationProviders() {\n const { result } = await _getAdminFederationProviders();\n return result;\n}\n\n/**\n * Get admin federation provider by id\n * @param {String} providerId social identity provider id/name\n * @returns {Promise} a promise that resolves a social admin federation object\n */\nexport async function getAdminFederationProvider(providerId) {\n const response = await getAdminFederationProviders();\n const foundProviders = response.filter(\n (provider) => provider._id === providerId\n );\n switch (foundProviders.length) {\n case 1:\n return foundProviders[0];\n case 0:\n throw new Error(`Provider '${providerId}' not found`);\n default:\n throw new Error(\n `${foundProviders.length} providers '${providerId}' found`\n );\n }\n}\n\nexport async function putProviderByTypeAndId(\n providerType: string,\n providerId: string,\n providerData: object\n) {\n debugMessage(`AdminFederationOps.putProviderByTypeAndId: start`);\n try {\n const response = await _putProviderByTypeAndId(\n providerType,\n providerId,\n providerData\n );\n debugMessage(`AdminFederationOps.putProviderByTypeAndId: end`);\n return response;\n } catch (importError) {\n if (\n importError.response?.status === 400 &&\n importError.response?.data?.message === 'Invalid attribute specified.'\n ) {\n const { validAttributes } = importError.response.data.detail;\n validAttributes.push('_id', '_type');\n for (const attribute of Object.keys(providerData)) {\n if (!validAttributes.includes(attribute)) {\n debugMessage(`Removing invalid attribute: ${attribute}`);\n delete providerData[attribute];\n }\n }\n const response = await _putProviderByTypeAndId(\n providerType,\n providerId,\n providerData\n );\n debugMessage(\n `AdminFederationOps.putProviderByTypeAndId: end (after retry)`\n );\n return response;\n } else {\n // re-throw unhandleable error\n throw importError;\n }\n }\n}\n\n/**\n * Delete admin federation provider by id\n * @param {String} providerId admin federation provider id/name\n * @returns {Promise} a promise that resolves to an admin federation provider object\n */\nexport async function deleteAdminFederationProvider(\n providerId: string\n): Promise<unknown> {\n const response = await getAdminFederationProviders();\n const foundProviders = response.filter(\n (provider) => provider._id === providerId\n );\n switch (foundProviders.length) {\n case 1:\n return await deleteProviderByTypeAndId(\n foundProviders[0]._type._id,\n foundProviders[0]._id\n );\n case 0:\n throw new Error(`Provider '${providerId}' not found`);\n default:\n throw new Error(\n `${foundProviders.length} providers '${providerId}' found`\n );\n }\n}\n\n/**\n * Export admin federation provider by id\n * @param {string} providerId provider id/name\n * @returns {Promise<AdminFederationExportInterface>} a promise that resolves to a SocialProviderExportInterface object\n */\nexport async function exportAdminFederationProvider(\n providerId: string\n): Promise<AdminFederationExportInterface> {\n debugMessage(`AdminFederationOps.exportAdminFederationProvider: start`);\n const exportData = createAdminFederationExportTemplate();\n const errors = [];\n try {\n const idpData = await getAdminFederationProvider(providerId);\n exportData.idp[idpData._id] = idpData;\n const idpConfig = await getConfigEntity(\n `${ADMIN_FED_CONFIG_ID_PREFIX}${providerId}`\n );\n exportData.config[idpConfig._id] = idpConfig;\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n throw new Error(`Export error:\\n${errorMessages}`);\n }\n debugMessage(`AdminFederationOps.exportAdminFederationProvider: end`);\n return exportData;\n}\n\n/**\n * Export all providers\n * @returns {Promise<AdminFederationExportInterface>} a promise that resolves to a SocialProviderExportInterface object\n */\nexport async function exportAdminFederationProviders(): Promise<AdminFederationExportInterface> {\n debugMessage(`AdminFederationOps.exportAdminFederationProviders: start`);\n const exportData = createAdminFederationExportTemplate();\n const errors = [];\n try {\n const allIdpsData = await getAdminFederationProviders();\n for (const idpData of allIdpsData) {\n try {\n exportData.idp[idpData._id] = idpData;\n const idpConfig = await getConfigEntity(\n `${ADMIN_FED_CONFIG_ID_PREFIX}${idpData._id}`\n );\n exportData.config[idpConfig._id] = idpConfig;\n } catch (error) {\n errors.push(error);\n }\n }\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n throw new Error(`Export error:\\n${errorMessages}`);\n }\n debugMessage(`AdminFederationOps.exportAdminFederationProviders: end`);\n return exportData;\n}\n\n/**\n * Import admin federation provider by id/name\n * @param {string} providerId provider id/name\n * @param {AdminFederationExportInterface} importData import data\n */\nexport async function importAdminFederationProvider(\n providerId: string,\n importData: AdminFederationExportInterface\n): Promise<SocialIdpSkeleton> {\n let response = null;\n const errors = [];\n const imported = [];\n for (const idpId of Object.keys(importData.idp)) {\n if (idpId === providerId) {\n try {\n response = await putProviderByTypeAndId(\n importData.idp[idpId]._type._id,\n idpId,\n importData.idp[idpId]\n );\n const configId = `${ADMIN_FED_CONFIG_ID_PREFIX}${idpId}`;\n if (importData.config[configId]) {\n await putConfigEntity(configId, importData.config[configId]);\n }\n imported.push(idpId);\n } catch (error) {\n errors.push(error);\n }\n }\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\n${providerId} not found in import data!`);\n }\n return response;\n}\n\n/**\n * Import first provider\n * @param {AdminFederationExportInterface} importData import data\n */\nexport async function importFirstAdminFederationProvider(\n importData: AdminFederationExportInterface\n): Promise<SocialIdpSkeleton> {\n let response = null;\n const errors = [];\n const imported = [];\n for (const idpId of Object.keys(importData.idp)) {\n try {\n response = await putProviderByTypeAndId(\n importData.idp[idpId]._type._id,\n idpId,\n importData.idp[idpId]\n );\n const configId = `${ADMIN_FED_CONFIG_ID_PREFIX}${idpId}`;\n if (importData.config[configId]) {\n await putConfigEntity(configId, importData.config[configId]);\n }\n imported.push(idpId);\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\nNo providers found in import data!`);\n }\n return response;\n}\n\n/**\n * Import all providers\n * @param {AdminFederationExportInterface} importData import data\n */\nexport async function importAdminFederationProviders(\n importData: AdminFederationExportInterface\n): Promise<SocialIdpSkeleton[]> {\n const response = [];\n const errors = [];\n const imported = [];\n for (const idpId of Object.keys(importData.idp)) {\n try {\n response.push(\n await putProviderByTypeAndId(\n importData.idp[idpId]._type._id,\n idpId,\n importData.idp[idpId]\n )\n );\n const configId = `${ADMIN_FED_CONFIG_ID_PREFIX}${idpId}`;\n if (importData.config[configId]) {\n await putConfigEntity(configId, importData.config[configId]);\n }\n imported.push(idpId);\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\nNo providers found in import data!`);\n }\n return response;\n}\n"]}