@rockcarver/frodo-lib 0.18.9-0 → 0.18.9-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.18.9-2] - 2023-04-05
11
+
12
+ ## [0.18.9-1] - 2023-03-27
13
+
14
+ ### Fixed
15
+
16
+ - rockcarver/frodo-cli#218: Frodo now allows 3 errors when polling for status during a `frodo esv apply` before aborting.
17
+
10
18
  ## [0.18.9-0] - 2023-03-23
11
19
 
12
20
  ### Added
@@ -1079,7 +1087,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1079
1087
  - Fixed problem with adding connection profiles
1080
1088
  - Miscellaneous bug fixes
1081
1089
 
1082
- [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.18.9-0...HEAD
1090
+ [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.18.9-2...HEAD
1091
+
1092
+ [0.18.9-2]: https://github.com/rockcarver/frodo-lib/compare/v0.18.9-1...v0.18.9-2
1093
+
1094
+ [0.18.9-1]: https://github.com/rockcarver/frodo-lib/compare/v0.18.9-0...v0.18.9-1
1083
1095
 
1084
1096
  [0.18.9-0]: https://github.com/rockcarver/frodo-lib/compare/v0.18.8...v0.18.9-0
1085
1097
 
@@ -118,7 +118,7 @@ function _tailLogs() {
118
118
  });
119
119
  }
120
120
  filteredLogs.forEach(e => {
121
- (0, _Console.printMessage)(JSON.stringify(e.payload), 'data');
121
+ (0, _Console.printMessage)(JSON.stringify(e), 'data');
122
122
  });
123
123
  setTimeout(() => {
124
124
  tailLogs(source, levels, txid, logsObject.result.pagedResultsCookie, nf);
@@ -1 +1 @@
1
- {"version":3,"file":"LogOps.js","names":["unfilterableNoise","miscNoise","journeysNoise","journeys","samlNoise","saml","noise","concat","numLogLevelMap","logLevelMap","SEVERE","ERROR","FATAL","WARN","WARNING","CONFIG","INFO","INFORMATION","DEBUG","FINE","FINER","FINEST","ALL","defaultNoiseFilter","resolveLevel","level","Number","isNaN","parseInt","resolvePayloadLevel","log","type","payload","match","e","getLogSources","sources","getSources","then","response","data","result","forEach","item","push","catch","error","printMessage","tailLogs","source","levels","txid","cookie","nf","LogApi","tail","status","logsObject","filteredLogs","noiseFilter","Array","isArray","filter","el","includes","logger","transactionId","JSON","stringify","setTimeout","pagedResultsCookie","provisionCreds","keyName","state","getUsername","getAPIKeys","k","name","getCurrentTimestamp","resp","createAPIKeyAndSecret","verboseMessage","getHost","fetchLogs","startTs","endTs","ffString","fetch"],"sources":["ops/cloud/LogOps.ts"],"sourcesContent":["import { printMessage, verboseMessage } from '../utils/Console';\nimport { getCurrentTimestamp } from '../utils/ExportImportUtils';\nimport {\n createAPIKeyAndSecret,\n getAPIKeys,\n getSources,\n} from '../../api/cloud/LogApi';\n\nimport * as state from '../../shared/State';\n\nimport * as LogApi from '../../api/cloud/LogApi';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst unfilterableNoise = [\n 'text/plain', // Unfortunately, it is impossible to filter out those without excluding IDM script logging as well\n];\n\nconst miscNoise = [\n 'com.iplanet.dpro.session.operations.ServerSessionOperationStrategy',\n 'com.iplanet.dpro.session.SessionIDFactory',\n 'com.iplanet.dpro.session.share.SessionEncodeURL',\n 'com.iplanet.services.naming.WebtopNaming',\n 'com.iplanet.sso.providers.dpro.SSOProviderImpl',\n 'com.sun.identity.authentication.AuthContext',\n 'com.sun.identity.authentication.client.AuthClientUtils',\n 'com.sun.identity.authentication.config.AMAuthConfigType',\n 'com.sun.identity.authentication.config.AMAuthenticationManager',\n 'com.sun.identity.authentication.config.AMAuthLevelManager',\n 'com.sun.identity.authentication.config.AMConfiguration',\n 'com.sun.identity.authentication.jaas.LoginContext',\n 'com.sun.identity.authentication.modules.application.Application',\n 'com.sun.identity.authentication.server.AuthContextLocal',\n 'com.sun.identity.authentication.service.AMLoginContext',\n 'com.sun.identity.authentication.service.AuthContextLookup',\n 'com.sun.identity.authentication.service.AuthD',\n 'com.sun.identity.authentication.service.AuthUtils',\n 'com.sun.identity.authentication.service.DSAMECallbackHandler',\n 'com.sun.identity.authentication.service.LoginState',\n 'com.sun.identity.authentication.spi.AMLoginModule',\n 'com.sun.identity.delegation.DelegationEvaluatorImpl',\n 'com.sun.identity.idm.plugins.internal.AgentsRepo',\n 'com.sun.identity.idm.server.IdCachedServicesImpl',\n 'com.sun.identity.idm.server.IdRepoPluginsCache',\n 'com.sun.identity.idm.server.IdServicesImpl',\n 'com.sun.identity.log.spi.ISDebug',\n 'com.sun.identity.shared.encode.CookieUtils',\n 'com.sun.identity.sm.ldap.SMSLdapObject',\n 'com.sun.identity.sm.CachedSMSEntry',\n 'com.sun.identity.sm.CachedSubEntries',\n 'com.sun.identity.sm.DNMapper',\n 'com.sun.identity.sm.ServiceConfigImpl',\n 'com.sun.identity.sm.ServiceConfigManagerImpl',\n 'com.sun.identity.sm.SMSEntry',\n 'com.sun.identity.sm.SMSUtils',\n 'com.sun.identity.sm.SmsWrapperObject',\n 'oauth2',\n 'org.apache.http.client.protocol.RequestAuthCache',\n 'org.apache.http.impl.conn.PoolingHttpClientConnectionManager',\n 'org.apache.http.impl.nio.client.InternalHttpAsyncClient',\n 'org.apache.http.impl.nio.client.InternalIODispatch',\n 'org.apache.http.impl.nio.client.MainClientExec',\n 'org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionImpl',\n 'org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager',\n 'org.forgerock.audit.AuditServiceImpl',\n 'org.forgerock.oauth2.core.RealmOAuth2ProviderSettings',\n 'org.forgerock.openam.authentication.service.JAASModuleDetector',\n 'org.forgerock.openam.authentication.service.LoginContextFactory',\n 'org.forgerock.openam.blacklist.BloomFilterBlacklist',\n 'org.forgerock.openam.blacklist.CTSBlacklist',\n 'org.forgerock.openam.core.realms.impl.CachingRealmLookup',\n 'org.forgerock.openam.core.rest.authn.RestAuthCallbackHandlerManager',\n 'org.forgerock.openam.core.rest.authn.trees.AuthTrees',\n 'org.forgerock.openam.cors.CorsFilter',\n 'org.forgerock.openam.cts.CTSPersistentStoreImpl',\n 'org.forgerock.openam.cts.impl.CoreTokenAdapter',\n 'org.forgerock.openam.cts.impl.queue.AsyncResultHandler',\n 'org.forgerock.openam.cts.reaper.ReaperDeleteOnQueryResultHandler',\n 'org.forgerock.openam.headers.DisableSameSiteCookiesFilter',\n 'org.forgerock.openam.idrepo.ldap.DJLDAPv3Repo',\n 'org.forgerock.openam.rest.CsrfFilter',\n 'org.forgerock.openam.rest.restAuthenticationFilter',\n 'org.forgerock.openam.rest.fluent.CrestLoggingFilter',\n 'org.forgerock.openam.session.cts.CtsOperations',\n 'org.forgerock.openam.session.stateless.StatelessSessionManager',\n 'org.forgerock.openam.sm.datalayer.impl.ldap.ExternalLdapConfig',\n 'org.forgerock.openam.sm.datalayer.impl.ldap.LdapQueryBuilder',\n 'org.forgerock.openam.sm.datalayer.impl.SeriesTaskExecutor',\n 'org.forgerock.openam.sm.datalayer.impl.SeriesTaskExecutorThread',\n 'org.forgerock.openam.sm.datalayer.providers.LdapConnectionFactoryProvider',\n 'org.forgerock.openam.sm.file.ConfigFileSystemHandler',\n 'org.forgerock.openam.social.idp.SocialIdentityProviders',\n 'org.forgerock.openam.utils.ClientUtils',\n 'org.forgerock.opendj.ldap.CachedConnectionPool',\n 'org.forgerock.opendj.ldap.LoadBalancer',\n 'org.forgerock.secrets.keystore.KeyStoreSecretStore',\n 'org.forgerock.secrets.propertyresolver.PropertyResolverSecretStore',\n 'org.forgerock.secrets.SecretsProvider',\n];\n\nconst journeysNoise = [\n 'org.forgerock.openam.auth.trees.engine.AuthTreeExecutor',\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst journeys = [\n 'org.forgerock.openam.auth.nodes.SelectIdPNode',\n 'org.forgerock.openam.auth.nodes.ValidatedPasswordNode',\n 'org.forgerock.openam.auth.nodes.ValidatedUsernameNode',\n 'org.forgerock.openam.auth.trees.engine.AuthTreeExecutor',\n];\n\nconst samlNoise = [\n 'com.sun.identity.cot.COTCache',\n 'com.sun.identity.plugin.configuration.impl.ConfigurationInstanceImpl',\n 'com.sun.identity.saml2.meta.SAML2MetaCache',\n 'com.sun.identity.saml2.profile.CacheCleanUpRunnable',\n 'org.apache.xml.security.keys.KeyInfo',\n 'org.apache.xml.security.signature.XMLSignature',\n 'org.apache.xml.security.utils.SignerOutputStream',\n 'org.apache.xml.security.utils.resolver.ResourceResolver',\n 'org.apache.xml.security.utils.resolver.implementations.ResolverFragment',\n 'org.apache.xml.security.algorithms.JCEMapper',\n 'org.apache.xml.security.algorithms.implementations.SignatureBaseRSA',\n 'org.apache.xml.security.algorithms.SignatureAlgorithm',\n 'org.apache.xml.security.utils.ElementProxy',\n 'org.apache.xml.security.transforms.Transforms',\n 'org.apache.xml.security.utils.DigesterOutputStream',\n 'org.apache.xml.security.signature.Reference',\n 'org.apache.xml.security.signature.Manifest',\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst saml = [\n 'jsp.saml2.spAssertionConsumer',\n 'com.sun.identity.saml.common.SAMLUtils',\n 'com.sun.identity.saml2.common.SAML2Utils',\n 'com.sun.identity.saml2.meta.SAML2MetaManager',\n 'com.sun.identity.saml2.xmlsig.FMSigProvider',\n];\n\nconst noise = miscNoise.concat(samlNoise).concat(journeysNoise);\n\nconst numLogLevelMap = {\n 0: ['SEVERE', 'ERROR', 'FATAL'],\n 1: ['WARNING', 'WARN', 'CONFIG'],\n 2: ['INFO', 'INFORMATION'],\n 3: ['DEBUG', 'FINE', 'FINER', 'FINEST'],\n 4: ['ALL'],\n};\n\nconst logLevelMap = {\n SEVERE: ['SEVERE', 'ERROR', 'FATAL'],\n ERROR: ['SEVERE', 'ERROR', 'FATAL'],\n FATAL: ['SEVERE', 'ERROR', 'FATAL'],\n WARN: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n WARNING: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n CONFIG: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n INFO: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n ],\n INFORMATION: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n ],\n DEBUG: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINE: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINER: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINEST: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n ALL: ['ALL'],\n};\n\nexport function defaultNoiseFilter() {\n return noise;\n}\n\nexport function resolveLevel(level) {\n // const levels = ['FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE', 'ALL'];\n // levels.splice(levels.indexOf(levelName) + 1, levels.length);\n if (Number.isNaN(parseInt(level, 10))) {\n return logLevelMap[level];\n }\n return logLevelMap[numLogLevelMap[level][0]];\n}\n\n// It seems that the undesirable 'text/plain' logs start with a date, not a LEVEL\n// Therefore, for those, this function returns null, and thus filters out the undesirable\nexport function resolvePayloadLevel(log) {\n try {\n return log.type !== 'text/plain'\n ? log.payload.level\n : log.payload.match(/^([^:]*):/)[1];\n } catch (e) {\n // Fail-safe for no group match\n return null;\n }\n}\n\nexport async function getLogSources() {\n const sources = [];\n await getSources()\n .then((response) => {\n response.data.result.forEach((item) => {\n sources.push(item);\n });\n })\n .catch((error) => {\n printMessage(\n `getSources ERROR: get log sources call returned ${error}}`,\n 'error'\n );\n return [];\n });\n return sources;\n}\n\nexport async function tailLogs(source, levels, txid, cookie, nf) {\n try {\n const response = await LogApi.tail(source, cookie);\n if (response.status < 200 || response.status > 399) {\n printMessage(\n `tail ERROR: tail call returned ${response.status}`,\n 'error'\n );\n return null;\n }\n // if (!cookie) {\n // await saveConnection();\n // }\n const logsObject = response.data;\n let filteredLogs = [];\n const noiseFilter = nf == null ? noise : nf;\n if (Array.isArray(logsObject.result)) {\n filteredLogs = logsObject.result.filter(\n (el) =>\n !noiseFilter.includes(el.payload.logger) &&\n !noiseFilter.includes(el.type) &&\n (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) &&\n (typeof txid === 'undefined' ||\n txid === null ||\n el.payload.transactionId?.includes(txid))\n );\n }\n\n filteredLogs.forEach((e) => {\n printMessage(JSON.stringify(e.payload), 'data');\n });\n\n setTimeout(() => {\n tailLogs(source, levels, txid, logsObject.result.pagedResultsCookie, nf);\n }, 5000);\n return null;\n } catch (e) {\n printMessage(`tail ERROR: tail data error - ${e}`, 'error');\n return `tail ERROR: tail data error - ${e}`;\n }\n}\n\nexport async function provisionCreds() {\n try {\n let keyName = `frodo-${state.getUsername()}`;\n try {\n const response = await getAPIKeys();\n for (const k of response.result) {\n if (k.name === keyName) {\n // append current timestamp to name if the named key already exists\n keyName = `${keyName}-${getCurrentTimestamp()}`;\n }\n }\n try {\n const resp = await createAPIKeyAndSecret(keyName);\n if (resp.data.name !== keyName) {\n printMessage(\n `create keys ERROR: could not create log API key ${keyName}`,\n 'error'\n );\n return null;\n }\n verboseMessage(\n `Created a new log API key [${keyName}] in ${state.getHost()}`\n );\n return resp.data;\n } catch (error) {\n printMessage(\n `create keys ERROR: create keys call returned ${error}`,\n 'error'\n );\n return null;\n }\n } catch (error) {\n printMessage(`get keys ERROR: get keys call returned ${error}`, 'error');\n }\n } catch (e) {\n printMessage(`create keys ERROR: create keys data error - ${e}`, 'error');\n return null;\n }\n}\n\nexport async function fetchLogs(\n source,\n startTs,\n endTs,\n levels,\n txid,\n ffString,\n cookie,\n nf\n) {\n try {\n // console.log(`startTs: ${startTs} endTs : ${endTs}`);\n const response = await LogApi.fetch(source, startTs, endTs, cookie);\n if (response.status < 200 || response.status > 399) {\n printMessage(\n `fetch ERROR: fetch call returned ${response.status}`,\n 'error'\n );\n return null;\n }\n const logsObject = response.data;\n let filteredLogs = [];\n const noiseFilter = nf == null ? noise : nf;\n if (Array.isArray(logsObject.result)) {\n filteredLogs = logsObject.result.filter(\n (el) =>\n !noiseFilter.includes(el.payload.logger) &&\n !noiseFilter.includes(el.type) &&\n (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) &&\n (typeof txid === 'undefined' ||\n txid === null ||\n el.payload.transactionId?.includes(txid))\n );\n }\n\n filteredLogs.forEach((e) => {\n const log = JSON.stringify(e, null, 2);\n if (ffString) {\n if (log.includes(ffString)) {\n printMessage(log, 'data');\n }\n } else {\n printMessage(log, 'data');\n }\n });\n if (logsObject.pagedResultsCookie != null) {\n await fetchLogs(\n source,\n startTs,\n endTs,\n levels,\n txid,\n ffString,\n logsObject.pagedResultsCookie,\n nf\n );\n }\n return null;\n } catch (e) {\n printMessage(`fetch ERROR: fetch data error - ${e}`, 'error');\n return `fetch ERROR: fetch data error - ${e}`;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LogOps.js","names":["unfilterableNoise","miscNoise","journeysNoise","journeys","samlNoise","saml","noise","concat","numLogLevelMap","logLevelMap","SEVERE","ERROR","FATAL","WARN","WARNING","CONFIG","INFO","INFORMATION","DEBUG","FINE","FINER","FINEST","ALL","defaultNoiseFilter","resolveLevel","level","Number","isNaN","parseInt","resolvePayloadLevel","log","type","payload","match","e","getLogSources","sources","getSources","then","response","data","result","forEach","item","push","catch","error","printMessage","tailLogs","source","levels","txid","cookie","nf","LogApi","tail","status","logsObject","filteredLogs","noiseFilter","Array","isArray","filter","el","includes","logger","transactionId","JSON","stringify","setTimeout","pagedResultsCookie","provisionCreds","keyName","state","getUsername","getAPIKeys","k","name","getCurrentTimestamp","resp","createAPIKeyAndSecret","verboseMessage","getHost","fetchLogs","startTs","endTs","ffString","fetch"],"sources":["ops/cloud/LogOps.ts"],"sourcesContent":["import { printMessage, verboseMessage } from '../utils/Console';\nimport { getCurrentTimestamp } from '../utils/ExportImportUtils';\nimport {\n createAPIKeyAndSecret,\n getAPIKeys,\n getSources,\n} from '../../api/cloud/LogApi';\n\nimport * as state from '../../shared/State';\n\nimport * as LogApi from '../../api/cloud/LogApi';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst unfilterableNoise = [\n 'text/plain', // Unfortunately, it is impossible to filter out those without excluding IDM script logging as well\n];\n\nconst miscNoise = [\n 'com.iplanet.dpro.session.operations.ServerSessionOperationStrategy',\n 'com.iplanet.dpro.session.SessionIDFactory',\n 'com.iplanet.dpro.session.share.SessionEncodeURL',\n 'com.iplanet.services.naming.WebtopNaming',\n 'com.iplanet.sso.providers.dpro.SSOProviderImpl',\n 'com.sun.identity.authentication.AuthContext',\n 'com.sun.identity.authentication.client.AuthClientUtils',\n 'com.sun.identity.authentication.config.AMAuthConfigType',\n 'com.sun.identity.authentication.config.AMAuthenticationManager',\n 'com.sun.identity.authentication.config.AMAuthLevelManager',\n 'com.sun.identity.authentication.config.AMConfiguration',\n 'com.sun.identity.authentication.jaas.LoginContext',\n 'com.sun.identity.authentication.modules.application.Application',\n 'com.sun.identity.authentication.server.AuthContextLocal',\n 'com.sun.identity.authentication.service.AMLoginContext',\n 'com.sun.identity.authentication.service.AuthContextLookup',\n 'com.sun.identity.authentication.service.AuthD',\n 'com.sun.identity.authentication.service.AuthUtils',\n 'com.sun.identity.authentication.service.DSAMECallbackHandler',\n 'com.sun.identity.authentication.service.LoginState',\n 'com.sun.identity.authentication.spi.AMLoginModule',\n 'com.sun.identity.delegation.DelegationEvaluatorImpl',\n 'com.sun.identity.idm.plugins.internal.AgentsRepo',\n 'com.sun.identity.idm.server.IdCachedServicesImpl',\n 'com.sun.identity.idm.server.IdRepoPluginsCache',\n 'com.sun.identity.idm.server.IdServicesImpl',\n 'com.sun.identity.log.spi.ISDebug',\n 'com.sun.identity.shared.encode.CookieUtils',\n 'com.sun.identity.sm.ldap.SMSLdapObject',\n 'com.sun.identity.sm.CachedSMSEntry',\n 'com.sun.identity.sm.CachedSubEntries',\n 'com.sun.identity.sm.DNMapper',\n 'com.sun.identity.sm.ServiceConfigImpl',\n 'com.sun.identity.sm.ServiceConfigManagerImpl',\n 'com.sun.identity.sm.SMSEntry',\n 'com.sun.identity.sm.SMSUtils',\n 'com.sun.identity.sm.SmsWrapperObject',\n 'oauth2',\n 'org.apache.http.client.protocol.RequestAuthCache',\n 'org.apache.http.impl.conn.PoolingHttpClientConnectionManager',\n 'org.apache.http.impl.nio.client.InternalHttpAsyncClient',\n 'org.apache.http.impl.nio.client.InternalIODispatch',\n 'org.apache.http.impl.nio.client.MainClientExec',\n 'org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionImpl',\n 'org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager',\n 'org.forgerock.audit.AuditServiceImpl',\n 'org.forgerock.oauth2.core.RealmOAuth2ProviderSettings',\n 'org.forgerock.openam.authentication.service.JAASModuleDetector',\n 'org.forgerock.openam.authentication.service.LoginContextFactory',\n 'org.forgerock.openam.blacklist.BloomFilterBlacklist',\n 'org.forgerock.openam.blacklist.CTSBlacklist',\n 'org.forgerock.openam.core.realms.impl.CachingRealmLookup',\n 'org.forgerock.openam.core.rest.authn.RestAuthCallbackHandlerManager',\n 'org.forgerock.openam.core.rest.authn.trees.AuthTrees',\n 'org.forgerock.openam.cors.CorsFilter',\n 'org.forgerock.openam.cts.CTSPersistentStoreImpl',\n 'org.forgerock.openam.cts.impl.CoreTokenAdapter',\n 'org.forgerock.openam.cts.impl.queue.AsyncResultHandler',\n 'org.forgerock.openam.cts.reaper.ReaperDeleteOnQueryResultHandler',\n 'org.forgerock.openam.headers.DisableSameSiteCookiesFilter',\n 'org.forgerock.openam.idrepo.ldap.DJLDAPv3Repo',\n 'org.forgerock.openam.rest.CsrfFilter',\n 'org.forgerock.openam.rest.restAuthenticationFilter',\n 'org.forgerock.openam.rest.fluent.CrestLoggingFilter',\n 'org.forgerock.openam.session.cts.CtsOperations',\n 'org.forgerock.openam.session.stateless.StatelessSessionManager',\n 'org.forgerock.openam.sm.datalayer.impl.ldap.ExternalLdapConfig',\n 'org.forgerock.openam.sm.datalayer.impl.ldap.LdapQueryBuilder',\n 'org.forgerock.openam.sm.datalayer.impl.SeriesTaskExecutor',\n 'org.forgerock.openam.sm.datalayer.impl.SeriesTaskExecutorThread',\n 'org.forgerock.openam.sm.datalayer.providers.LdapConnectionFactoryProvider',\n 'org.forgerock.openam.sm.file.ConfigFileSystemHandler',\n 'org.forgerock.openam.social.idp.SocialIdentityProviders',\n 'org.forgerock.openam.utils.ClientUtils',\n 'org.forgerock.opendj.ldap.CachedConnectionPool',\n 'org.forgerock.opendj.ldap.LoadBalancer',\n 'org.forgerock.secrets.keystore.KeyStoreSecretStore',\n 'org.forgerock.secrets.propertyresolver.PropertyResolverSecretStore',\n 'org.forgerock.secrets.SecretsProvider',\n];\n\nconst journeysNoise = [\n 'org.forgerock.openam.auth.trees.engine.AuthTreeExecutor',\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst journeys = [\n 'org.forgerock.openam.auth.nodes.SelectIdPNode',\n 'org.forgerock.openam.auth.nodes.ValidatedPasswordNode',\n 'org.forgerock.openam.auth.nodes.ValidatedUsernameNode',\n 'org.forgerock.openam.auth.trees.engine.AuthTreeExecutor',\n];\n\nconst samlNoise = [\n 'com.sun.identity.cot.COTCache',\n 'com.sun.identity.plugin.configuration.impl.ConfigurationInstanceImpl',\n 'com.sun.identity.saml2.meta.SAML2MetaCache',\n 'com.sun.identity.saml2.profile.CacheCleanUpRunnable',\n 'org.apache.xml.security.keys.KeyInfo',\n 'org.apache.xml.security.signature.XMLSignature',\n 'org.apache.xml.security.utils.SignerOutputStream',\n 'org.apache.xml.security.utils.resolver.ResourceResolver',\n 'org.apache.xml.security.utils.resolver.implementations.ResolverFragment',\n 'org.apache.xml.security.algorithms.JCEMapper',\n 'org.apache.xml.security.algorithms.implementations.SignatureBaseRSA',\n 'org.apache.xml.security.algorithms.SignatureAlgorithm',\n 'org.apache.xml.security.utils.ElementProxy',\n 'org.apache.xml.security.transforms.Transforms',\n 'org.apache.xml.security.utils.DigesterOutputStream',\n 'org.apache.xml.security.signature.Reference',\n 'org.apache.xml.security.signature.Manifest',\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst saml = [\n 'jsp.saml2.spAssertionConsumer',\n 'com.sun.identity.saml.common.SAMLUtils',\n 'com.sun.identity.saml2.common.SAML2Utils',\n 'com.sun.identity.saml2.meta.SAML2MetaManager',\n 'com.sun.identity.saml2.xmlsig.FMSigProvider',\n];\n\nconst noise = miscNoise.concat(samlNoise).concat(journeysNoise);\n\nconst numLogLevelMap = {\n 0: ['SEVERE', 'ERROR', 'FATAL'],\n 1: ['WARNING', 'WARN', 'CONFIG'],\n 2: ['INFO', 'INFORMATION'],\n 3: ['DEBUG', 'FINE', 'FINER', 'FINEST'],\n 4: ['ALL'],\n};\n\nconst logLevelMap = {\n SEVERE: ['SEVERE', 'ERROR', 'FATAL'],\n ERROR: ['SEVERE', 'ERROR', 'FATAL'],\n FATAL: ['SEVERE', 'ERROR', 'FATAL'],\n WARN: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n WARNING: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n CONFIG: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n INFO: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n ],\n INFORMATION: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n ],\n DEBUG: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINE: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINER: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINEST: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n ALL: ['ALL'],\n};\n\nexport function defaultNoiseFilter() {\n return noise;\n}\n\nexport function resolveLevel(level) {\n // const levels = ['FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE', 'ALL'];\n // levels.splice(levels.indexOf(levelName) + 1, levels.length);\n if (Number.isNaN(parseInt(level, 10))) {\n return logLevelMap[level];\n }\n return logLevelMap[numLogLevelMap[level][0]];\n}\n\n// It seems that the undesirable 'text/plain' logs start with a date, not a LEVEL\n// Therefore, for those, this function returns null, and thus filters out the undesirable\nexport function resolvePayloadLevel(log) {\n try {\n return log.type !== 'text/plain'\n ? log.payload.level\n : log.payload.match(/^([^:]*):/)[1];\n } catch (e) {\n // Fail-safe for no group match\n return null;\n }\n}\n\nexport async function getLogSources() {\n const sources = [];\n await getSources()\n .then((response) => {\n response.data.result.forEach((item) => {\n sources.push(item);\n });\n })\n .catch((error) => {\n printMessage(\n `getSources ERROR: get log sources call returned ${error}}`,\n 'error'\n );\n return [];\n });\n return sources;\n}\n\nexport async function tailLogs(source, levels, txid, cookie, nf) {\n try {\n const response = await LogApi.tail(source, cookie);\n if (response.status < 200 || response.status > 399) {\n printMessage(\n `tail ERROR: tail call returned ${response.status}`,\n 'error'\n );\n return null;\n }\n // if (!cookie) {\n // await saveConnection();\n // }\n const logsObject = response.data;\n let filteredLogs = [];\n const noiseFilter = nf == null ? noise : nf;\n if (Array.isArray(logsObject.result)) {\n filteredLogs = logsObject.result.filter(\n (el) =>\n !noiseFilter.includes(el.payload.logger) &&\n !noiseFilter.includes(el.type) &&\n (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) &&\n (typeof txid === 'undefined' ||\n txid === null ||\n el.payload.transactionId?.includes(txid))\n );\n }\n\n filteredLogs.forEach((e) => {\n printMessage(JSON.stringify(e), 'data');\n });\n\n setTimeout(() => {\n tailLogs(source, levels, txid, logsObject.result.pagedResultsCookie, nf);\n }, 5000);\n return null;\n } catch (e) {\n printMessage(`tail ERROR: tail data error - ${e}`, 'error');\n return `tail ERROR: tail data error - ${e}`;\n }\n}\n\nexport async function provisionCreds() {\n try {\n let keyName = `frodo-${state.getUsername()}`;\n try {\n const response = await getAPIKeys();\n for (const k of response.result) {\n if (k.name === keyName) {\n // append current timestamp to name if the named key already exists\n keyName = `${keyName}-${getCurrentTimestamp()}`;\n }\n }\n try {\n const resp = await createAPIKeyAndSecret(keyName);\n if (resp.data.name !== keyName) {\n printMessage(\n `create keys ERROR: could not create log API key ${keyName}`,\n 'error'\n );\n return null;\n }\n verboseMessage(\n `Created a new log API key [${keyName}] in ${state.getHost()}`\n );\n return resp.data;\n } catch (error) {\n printMessage(\n `create keys ERROR: create keys call returned ${error}`,\n 'error'\n );\n return null;\n }\n } catch (error) {\n printMessage(`get keys ERROR: get keys call returned ${error}`, 'error');\n }\n } catch (e) {\n printMessage(`create keys ERROR: create keys data error - ${e}`, 'error');\n return null;\n }\n}\n\nexport async function fetchLogs(\n source,\n startTs,\n endTs,\n levels,\n txid,\n ffString,\n cookie,\n nf\n) {\n try {\n // console.log(`startTs: ${startTs} endTs : ${endTs}`);\n const response = await LogApi.fetch(source, startTs, endTs, cookie);\n if (response.status < 200 || response.status > 399) {\n printMessage(\n `fetch ERROR: fetch call returned ${response.status}`,\n 'error'\n );\n return null;\n }\n const logsObject = response.data;\n let filteredLogs = [];\n const noiseFilter = nf == null ? noise : nf;\n if (Array.isArray(logsObject.result)) {\n filteredLogs = logsObject.result.filter(\n (el) =>\n !noiseFilter.includes(el.payload.logger) &&\n !noiseFilter.includes(el.type) &&\n (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) &&\n (typeof txid === 'undefined' ||\n txid === null ||\n el.payload.transactionId?.includes(txid))\n );\n }\n\n filteredLogs.forEach((e) => {\n const log = JSON.stringify(e, null, 2);\n if (ffString) {\n if (log.includes(ffString)) {\n printMessage(log, 'data');\n }\n } else {\n printMessage(log, 'data');\n }\n });\n if (logsObject.pagedResultsCookie != null) {\n await fetchLogs(\n source,\n startTs,\n endTs,\n levels,\n txid,\n ffString,\n logsObject.pagedResultsCookie,\n nf\n );\n }\n return null;\n } catch (e) {\n printMessage(`fetch ERROR: fetch data error - ${e}`, 'error');\n return `fetch ERROR: fetch data error - ${e}`;\n }\n}\n"],"mappings":"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"}
@@ -60,13 +60,25 @@ function _applyUpdates() {
60
60
  if (wait) {
61
61
  var start = new Date().getTime();
62
62
  var runtime = 0;
63
+ var errors = 0;
64
+ var maxErrors = 3;
63
65
  while (status !== _StartupApi.RestartStatus.ready && start + timeout > new Date().getTime()) {
64
- // eslint-disable-next-line no-await-in-loop, no-promise-executor-return
65
66
  yield new Promise(resolve => setTimeout(resolve, 5000));
66
- // eslint-disable-next-line no-await-in-loop
67
- status = yield (0, _StartupApi.getStatus)();
68
- runtime = new Date().getTime() - start;
69
- (0, _Console.updateProgressIndicator)("".concat(status, " (").concat(Math.round(runtime / 1000), "s)"));
67
+ try {
68
+ status = yield (0, _StartupApi.getStatus)();
69
+
70
+ // reset errors after successful status call
71
+ if (errors) errors = 0;
72
+ runtime = new Date().getTime() - start;
73
+ (0, _Console.updateProgressIndicator)("".concat(status, " (").concat(Math.round(runtime / 1000), "s)"));
74
+ } catch (error) {
75
+ errors++;
76
+ if (errors > maxErrors) {
77
+ throw error;
78
+ }
79
+ runtime = new Date().getTime() - start;
80
+ (0, _Console.updateProgressIndicator)("".concat(error.message, " - retry ").concat(errors, "/").concat(maxErrors, " (").concat(Math.round(runtime / 1000), "s)"));
81
+ }
70
82
  }
71
83
  if (runtime < timeout) {
72
84
  (0, _Console.stopProgressIndicator)("Updates applied in ".concat(Math.round(runtime / 1000), "s with final status: ").concat(status), 'success');
@@ -1 +1 @@
1
- {"version":3,"file":"StartupOps.js","names":["checkForUpdates","updates","secrets","variables","createProgressIndicator","undefined","getSecrets","result","filter","secret","loaded","getVariables","variable","error","stopProgressIndicator","response","data","code","message","updateCount","length","applyUpdates","wait","timeout","status","initiateRestart","start","Date","getTime","runtime","RestartStatus","ready","Promise","resolve","setTimeout","getStatus","updateProgressIndicator","Math","round"],"sources":["ops/cloud/StartupOps.ts"],"sourcesContent":["import {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getSecrets } from '../../api/cloud/SecretsApi';\nimport {\n getStatus,\n initiateRestart,\n RestartStatus,\n} from '../../api/cloud/StartupApi';\nimport { getVariables } from '../../api/cloud/VariablesApi';\n\n/**\n * Updates that need to be applied.\n */\nexport interface Updates {\n /**\n * Array of secrets that need applying\n */\n secrets?: unknown[];\n /**\n * Array of variables that need applying\n */\n variables?: unknown[];\n}\n\n/**\n * Check for updates that need applying\n * @returns {Promise<boolean>} true if there are updates that need to be applied, false otherwise\n */\nexport async function checkForUpdates(): Promise<Updates> {\n const updates: Updates = { secrets: [], variables: [] };\n createProgressIndicator(\n undefined,\n `Checking for updates to apply...`,\n 'indeterminate'\n );\n try {\n updates.secrets = (await getSecrets()).result.filter(\n (secret: { loaded: unknown }) => !secret.loaded\n );\n updates.variables = (await getVariables()).result.filter(\n (variable: { loaded: unknown }) => !variable.loaded\n );\n } catch (error) {\n stopProgressIndicator(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n const updateCount = updates.secrets?.length + updates.variables?.length || 0;\n if (updateCount > 0) {\n stopProgressIndicator(\n `${updateCount} update(s) need to be applied`,\n 'success'\n );\n } else {\n stopProgressIndicator(`No updates need to be applied`, 'success');\n }\n return updates;\n}\n\n/**\n * Apply updates\n * @param {boolean} wait wait for the operation to complete or not\n * @param {number} timeout timeout in milliseconds\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function applyUpdates(wait: boolean, timeout = 10 * 60 * 1000) {\n createProgressIndicator(undefined, `Applying updates...`, 'indeterminate');\n try {\n let status = await initiateRestart();\n if (wait) {\n const start = new Date().getTime();\n let runtime = 0;\n while (\n status !== RestartStatus.ready &&\n start + timeout > new Date().getTime()\n ) {\n // eslint-disable-next-line no-await-in-loop, no-promise-executor-return\n await new Promise((resolve) => setTimeout(resolve, 5000));\n // eslint-disable-next-line no-await-in-loop\n status = await getStatus();\n runtime = new Date().getTime() - start;\n updateProgressIndicator(`${status} (${Math.round(runtime / 1000)}s)`);\n }\n if (runtime < timeout) {\n stopProgressIndicator(\n `Updates applied in ${Math.round(\n runtime / 1000\n )}s with final status: ${status}`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n `Updates timed out after ${Math.round(\n runtime / 1000\n )}s with final status: ${status}`,\n 'warn'\n );\n return false;\n }\n } else {\n stopProgressIndicator(\n `Updates are being applied. Changes may take up to 10 minutes to propagate, during which time you will not be able to make further updates.`,\n 'success'\n );\n return true;\n }\n } catch (error) {\n stopProgressIndicator(\n `Error: ${error.response?.data?.code || error} - ${\n error.response?.data?.message\n }`,\n 'fail'\n );\n return false;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"StartupOps.js","names":["checkForUpdates","updates","secrets","variables","createProgressIndicator","undefined","getSecrets","result","filter","secret","loaded","getVariables","variable","error","stopProgressIndicator","response","data","code","message","updateCount","length","applyUpdates","wait","timeout","status","initiateRestart","start","Date","getTime","runtime","errors","maxErrors","RestartStatus","ready","Promise","resolve","setTimeout","getStatus","updateProgressIndicator","Math","round"],"sources":["ops/cloud/StartupOps.ts"],"sourcesContent":["import {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getSecrets } from '../../api/cloud/SecretsApi';\nimport {\n getStatus,\n initiateRestart,\n RestartStatus,\n} from '../../api/cloud/StartupApi';\nimport { getVariables } from '../../api/cloud/VariablesApi';\n\n/**\n * Updates that need to be applied.\n */\nexport interface Updates {\n /**\n * Array of secrets that need applying\n */\n secrets?: unknown[];\n /**\n * Array of variables that need applying\n */\n variables?: unknown[];\n}\n\n/**\n * Check for updates that need applying\n * @returns {Promise<boolean>} true if there are updates that need to be applied, false otherwise\n */\nexport async function checkForUpdates(): Promise<Updates> {\n const updates: Updates = { secrets: [], variables: [] };\n createProgressIndicator(\n undefined,\n `Checking for updates to apply...`,\n 'indeterminate'\n );\n try {\n updates.secrets = (await getSecrets()).result.filter(\n (secret: { loaded: unknown }) => !secret.loaded\n );\n updates.variables = (await getVariables()).result.filter(\n (variable: { loaded: unknown }) => !variable.loaded\n );\n } catch (error) {\n stopProgressIndicator(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n const updateCount = updates.secrets?.length + updates.variables?.length || 0;\n if (updateCount > 0) {\n stopProgressIndicator(\n `${updateCount} update(s) need to be applied`,\n 'success'\n );\n } else {\n stopProgressIndicator(`No updates need to be applied`, 'success');\n }\n return updates;\n}\n\n/**\n * Apply updates\n * @param {boolean} wait wait for the operation to complete or not\n * @param {number} timeout timeout in milliseconds\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function applyUpdates(wait: boolean, timeout = 10 * 60 * 1000) {\n createProgressIndicator(undefined, `Applying updates...`, 'indeterminate');\n try {\n let status = await initiateRestart();\n if (wait) {\n const start = new Date().getTime();\n let runtime = 0;\n let errors = 0;\n const maxErrors = 3;\n while (\n status !== RestartStatus.ready &&\n start + timeout > new Date().getTime()\n ) {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n try {\n status = await getStatus();\n\n // reset errors after successful status call\n if (errors) errors = 0;\n\n runtime = new Date().getTime() - start;\n updateProgressIndicator(`${status} (${Math.round(runtime / 1000)}s)`);\n } catch (error) {\n errors++;\n if (errors > maxErrors) {\n throw error;\n }\n runtime = new Date().getTime() - start;\n updateProgressIndicator(\n `${error.message} - retry ${errors}/${maxErrors} (${Math.round(\n runtime / 1000\n )}s)`\n );\n }\n }\n if (runtime < timeout) {\n stopProgressIndicator(\n `Updates applied in ${Math.round(\n runtime / 1000\n )}s with final status: ${status}`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n `Updates timed out after ${Math.round(\n runtime / 1000\n )}s with final status: ${status}`,\n 'warn'\n );\n return false;\n }\n } else {\n stopProgressIndicator(\n `Updates are being applied. Changes may take up to 10 minutes to propagate, during which time you will not be able to make further updates.`,\n 'success'\n );\n return true;\n }\n } catch (error) {\n stopProgressIndicator(\n `Error: ${error.response?.data?.code || error} - ${\n error.response?.data?.message\n }`,\n 'fail'\n );\n return false;\n }\n}\n"],"mappings":"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"}
@@ -94,7 +94,7 @@ export async function tailLogs(source, levels, txid, cookie, nf) {
94
94
  });
95
95
  }
96
96
  filteredLogs.forEach(e => {
97
- printMessage(JSON.stringify(e.payload), 'data');
97
+ printMessage(JSON.stringify(e), 'data');
98
98
  });
99
99
  setTimeout(() => {
100
100
  tailLogs(source, levels, txid, logsObject.result.pagedResultsCookie, nf);
@@ -46,13 +46,25 @@ export async function applyUpdates(wait, timeout = 10 * 60 * 1000) {
46
46
  if (wait) {
47
47
  const start = new Date().getTime();
48
48
  let runtime = 0;
49
+ let errors = 0;
50
+ const maxErrors = 3;
49
51
  while (status !== RestartStatus.ready && start + timeout > new Date().getTime()) {
50
- // eslint-disable-next-line no-await-in-loop, no-promise-executor-return
51
52
  await new Promise(resolve => setTimeout(resolve, 5000));
52
- // eslint-disable-next-line no-await-in-loop
53
- status = await getStatus();
54
- runtime = new Date().getTime() - start;
55
- updateProgressIndicator(`${status} (${Math.round(runtime / 1000)}s)`);
53
+ try {
54
+ status = await getStatus();
55
+
56
+ // reset errors after successful status call
57
+ if (errors) errors = 0;
58
+ runtime = new Date().getTime() - start;
59
+ updateProgressIndicator(`${status} (${Math.round(runtime / 1000)}s)`);
60
+ } catch (error) {
61
+ errors++;
62
+ if (errors > maxErrors) {
63
+ throw error;
64
+ }
65
+ runtime = new Date().getTime() - start;
66
+ updateProgressIndicator(`${error.message} - retry ${errors}/${maxErrors} (${Math.round(runtime / 1000)}s)`);
67
+ }
56
68
  }
57
69
  if (runtime < timeout) {
58
70
  stopProgressIndicator(`Updates applied in ${Math.round(runtime / 1000)}s with final status: ${status}`, 'success');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-lib",
3
- "version": "0.18.9-0",
3
+ "version": "0.18.9-2",
4
4
  "type": "commonjs",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.mjs",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ops/cloud/LogOps.ts"],"names":[],"mappings":"AA4OA,wBAAgB,kBAAkB,aAEjC;AAED,wBAAgB,YAAY,CAAC,KAAK,KAAA,OAOjC;AAID,wBAAgB,mBAAmB,CAAC,GAAG,KAAA,OAStC;AAED,wBAAsB,aAAa,mBAgBlC;AAED,wBAAsB,QAAQ,CAAC,MAAM,KAAA,EAAE,MAAM,KAAA,EAAE,IAAI,KAAA,EAAE,MAAM,KAAA,EAAE,EAAE,KAAA,mBAwC9D;AAED,wBAAsB,cAAc,iBAsCnC;AAED,wBAAsB,SAAS,CAC7B,MAAM,KAAA,EACN,OAAO,KAAA,EACP,KAAK,KAAA,EACL,MAAM,KAAA,EACN,IAAI,KAAA,EACJ,QAAQ,KAAA,EACR,MAAM,KAAA,EACN,EAAE,KAAA,mBAsDH","file":"LogOps.d.ts","sourcesContent":["import { printMessage, verboseMessage } from '../utils/Console';\nimport { getCurrentTimestamp } from '../utils/ExportImportUtils';\nimport {\n createAPIKeyAndSecret,\n getAPIKeys,\n getSources,\n} from '../../api/cloud/LogApi';\n\nimport * as state from '../../shared/State';\n\nimport * as LogApi from '../../api/cloud/LogApi';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst unfilterableNoise = [\n 'text/plain', // Unfortunately, it is impossible to filter out those without excluding IDM script logging as well\n];\n\nconst miscNoise = [\n 'com.iplanet.dpro.session.operations.ServerSessionOperationStrategy',\n 'com.iplanet.dpro.session.SessionIDFactory',\n 'com.iplanet.dpro.session.share.SessionEncodeURL',\n 'com.iplanet.services.naming.WebtopNaming',\n 'com.iplanet.sso.providers.dpro.SSOProviderImpl',\n 'com.sun.identity.authentication.AuthContext',\n 'com.sun.identity.authentication.client.AuthClientUtils',\n 'com.sun.identity.authentication.config.AMAuthConfigType',\n 'com.sun.identity.authentication.config.AMAuthenticationManager',\n 'com.sun.identity.authentication.config.AMAuthLevelManager',\n 'com.sun.identity.authentication.config.AMConfiguration',\n 'com.sun.identity.authentication.jaas.LoginContext',\n 'com.sun.identity.authentication.modules.application.Application',\n 'com.sun.identity.authentication.server.AuthContextLocal',\n 'com.sun.identity.authentication.service.AMLoginContext',\n 'com.sun.identity.authentication.service.AuthContextLookup',\n 'com.sun.identity.authentication.service.AuthD',\n 'com.sun.identity.authentication.service.AuthUtils',\n 'com.sun.identity.authentication.service.DSAMECallbackHandler',\n 'com.sun.identity.authentication.service.LoginState',\n 'com.sun.identity.authentication.spi.AMLoginModule',\n 'com.sun.identity.delegation.DelegationEvaluatorImpl',\n 'com.sun.identity.idm.plugins.internal.AgentsRepo',\n 'com.sun.identity.idm.server.IdCachedServicesImpl',\n 'com.sun.identity.idm.server.IdRepoPluginsCache',\n 'com.sun.identity.idm.server.IdServicesImpl',\n 'com.sun.identity.log.spi.ISDebug',\n 'com.sun.identity.shared.encode.CookieUtils',\n 'com.sun.identity.sm.ldap.SMSLdapObject',\n 'com.sun.identity.sm.CachedSMSEntry',\n 'com.sun.identity.sm.CachedSubEntries',\n 'com.sun.identity.sm.DNMapper',\n 'com.sun.identity.sm.ServiceConfigImpl',\n 'com.sun.identity.sm.ServiceConfigManagerImpl',\n 'com.sun.identity.sm.SMSEntry',\n 'com.sun.identity.sm.SMSUtils',\n 'com.sun.identity.sm.SmsWrapperObject',\n 'oauth2',\n 'org.apache.http.client.protocol.RequestAuthCache',\n 'org.apache.http.impl.conn.PoolingHttpClientConnectionManager',\n 'org.apache.http.impl.nio.client.InternalHttpAsyncClient',\n 'org.apache.http.impl.nio.client.InternalIODispatch',\n 'org.apache.http.impl.nio.client.MainClientExec',\n 'org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionImpl',\n 'org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager',\n 'org.forgerock.audit.AuditServiceImpl',\n 'org.forgerock.oauth2.core.RealmOAuth2ProviderSettings',\n 'org.forgerock.openam.authentication.service.JAASModuleDetector',\n 'org.forgerock.openam.authentication.service.LoginContextFactory',\n 'org.forgerock.openam.blacklist.BloomFilterBlacklist',\n 'org.forgerock.openam.blacklist.CTSBlacklist',\n 'org.forgerock.openam.core.realms.impl.CachingRealmLookup',\n 'org.forgerock.openam.core.rest.authn.RestAuthCallbackHandlerManager',\n 'org.forgerock.openam.core.rest.authn.trees.AuthTrees',\n 'org.forgerock.openam.cors.CorsFilter',\n 'org.forgerock.openam.cts.CTSPersistentStoreImpl',\n 'org.forgerock.openam.cts.impl.CoreTokenAdapter',\n 'org.forgerock.openam.cts.impl.queue.AsyncResultHandler',\n 'org.forgerock.openam.cts.reaper.ReaperDeleteOnQueryResultHandler',\n 'org.forgerock.openam.headers.DisableSameSiteCookiesFilter',\n 'org.forgerock.openam.idrepo.ldap.DJLDAPv3Repo',\n 'org.forgerock.openam.rest.CsrfFilter',\n 'org.forgerock.openam.rest.restAuthenticationFilter',\n 'org.forgerock.openam.rest.fluent.CrestLoggingFilter',\n 'org.forgerock.openam.session.cts.CtsOperations',\n 'org.forgerock.openam.session.stateless.StatelessSessionManager',\n 'org.forgerock.openam.sm.datalayer.impl.ldap.ExternalLdapConfig',\n 'org.forgerock.openam.sm.datalayer.impl.ldap.LdapQueryBuilder',\n 'org.forgerock.openam.sm.datalayer.impl.SeriesTaskExecutor',\n 'org.forgerock.openam.sm.datalayer.impl.SeriesTaskExecutorThread',\n 'org.forgerock.openam.sm.datalayer.providers.LdapConnectionFactoryProvider',\n 'org.forgerock.openam.sm.file.ConfigFileSystemHandler',\n 'org.forgerock.openam.social.idp.SocialIdentityProviders',\n 'org.forgerock.openam.utils.ClientUtils',\n 'org.forgerock.opendj.ldap.CachedConnectionPool',\n 'org.forgerock.opendj.ldap.LoadBalancer',\n 'org.forgerock.secrets.keystore.KeyStoreSecretStore',\n 'org.forgerock.secrets.propertyresolver.PropertyResolverSecretStore',\n 'org.forgerock.secrets.SecretsProvider',\n];\n\nconst journeysNoise = [\n 'org.forgerock.openam.auth.trees.engine.AuthTreeExecutor',\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst journeys = [\n 'org.forgerock.openam.auth.nodes.SelectIdPNode',\n 'org.forgerock.openam.auth.nodes.ValidatedPasswordNode',\n 'org.forgerock.openam.auth.nodes.ValidatedUsernameNode',\n 'org.forgerock.openam.auth.trees.engine.AuthTreeExecutor',\n];\n\nconst samlNoise = [\n 'com.sun.identity.cot.COTCache',\n 'com.sun.identity.plugin.configuration.impl.ConfigurationInstanceImpl',\n 'com.sun.identity.saml2.meta.SAML2MetaCache',\n 'com.sun.identity.saml2.profile.CacheCleanUpRunnable',\n 'org.apache.xml.security.keys.KeyInfo',\n 'org.apache.xml.security.signature.XMLSignature',\n 'org.apache.xml.security.utils.SignerOutputStream',\n 'org.apache.xml.security.utils.resolver.ResourceResolver',\n 'org.apache.xml.security.utils.resolver.implementations.ResolverFragment',\n 'org.apache.xml.security.algorithms.JCEMapper',\n 'org.apache.xml.security.algorithms.implementations.SignatureBaseRSA',\n 'org.apache.xml.security.algorithms.SignatureAlgorithm',\n 'org.apache.xml.security.utils.ElementProxy',\n 'org.apache.xml.security.transforms.Transforms',\n 'org.apache.xml.security.utils.DigesterOutputStream',\n 'org.apache.xml.security.signature.Reference',\n 'org.apache.xml.security.signature.Manifest',\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst saml = [\n 'jsp.saml2.spAssertionConsumer',\n 'com.sun.identity.saml.common.SAMLUtils',\n 'com.sun.identity.saml2.common.SAML2Utils',\n 'com.sun.identity.saml2.meta.SAML2MetaManager',\n 'com.sun.identity.saml2.xmlsig.FMSigProvider',\n];\n\nconst noise = miscNoise.concat(samlNoise).concat(journeysNoise);\n\nconst numLogLevelMap = {\n 0: ['SEVERE', 'ERROR', 'FATAL'],\n 1: ['WARNING', 'WARN', 'CONFIG'],\n 2: ['INFO', 'INFORMATION'],\n 3: ['DEBUG', 'FINE', 'FINER', 'FINEST'],\n 4: ['ALL'],\n};\n\nconst logLevelMap = {\n SEVERE: ['SEVERE', 'ERROR', 'FATAL'],\n ERROR: ['SEVERE', 'ERROR', 'FATAL'],\n FATAL: ['SEVERE', 'ERROR', 'FATAL'],\n WARN: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n WARNING: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n CONFIG: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n INFO: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n ],\n INFORMATION: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n ],\n DEBUG: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINE: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINER: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINEST: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n ALL: ['ALL'],\n};\n\nexport function defaultNoiseFilter() {\n return noise;\n}\n\nexport function resolveLevel(level) {\n // const levels = ['FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE', 'ALL'];\n // levels.splice(levels.indexOf(levelName) + 1, levels.length);\n if (Number.isNaN(parseInt(level, 10))) {\n return logLevelMap[level];\n }\n return logLevelMap[numLogLevelMap[level][0]];\n}\n\n// It seems that the undesirable 'text/plain' logs start with a date, not a LEVEL\n// Therefore, for those, this function returns null, and thus filters out the undesirable\nexport function resolvePayloadLevel(log) {\n try {\n return log.type !== 'text/plain'\n ? log.payload.level\n : log.payload.match(/^([^:]*):/)[1];\n } catch (e) {\n // Fail-safe for no group match\n return null;\n }\n}\n\nexport async function getLogSources() {\n const sources = [];\n await getSources()\n .then((response) => {\n response.data.result.forEach((item) => {\n sources.push(item);\n });\n })\n .catch((error) => {\n printMessage(\n `getSources ERROR: get log sources call returned ${error}}`,\n 'error'\n );\n return [];\n });\n return sources;\n}\n\nexport async function tailLogs(source, levels, txid, cookie, nf) {\n try {\n const response = await LogApi.tail(source, cookie);\n if (response.status < 200 || response.status > 399) {\n printMessage(\n `tail ERROR: tail call returned ${response.status}`,\n 'error'\n );\n return null;\n }\n // if (!cookie) {\n // await saveConnection();\n // }\n const logsObject = response.data;\n let filteredLogs = [];\n const noiseFilter = nf == null ? noise : nf;\n if (Array.isArray(logsObject.result)) {\n filteredLogs = logsObject.result.filter(\n (el) =>\n !noiseFilter.includes(el.payload.logger) &&\n !noiseFilter.includes(el.type) &&\n (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) &&\n (typeof txid === 'undefined' ||\n txid === null ||\n el.payload.transactionId?.includes(txid))\n );\n }\n\n filteredLogs.forEach((e) => {\n printMessage(JSON.stringify(e.payload), 'data');\n });\n\n setTimeout(() => {\n tailLogs(source, levels, txid, logsObject.result.pagedResultsCookie, nf);\n }, 5000);\n return null;\n } catch (e) {\n printMessage(`tail ERROR: tail data error - ${e}`, 'error');\n return `tail ERROR: tail data error - ${e}`;\n }\n}\n\nexport async function provisionCreds() {\n try {\n let keyName = `frodo-${state.getUsername()}`;\n try {\n const response = await getAPIKeys();\n for (const k of response.result) {\n if (k.name === keyName) {\n // append current timestamp to name if the named key already exists\n keyName = `${keyName}-${getCurrentTimestamp()}`;\n }\n }\n try {\n const resp = await createAPIKeyAndSecret(keyName);\n if (resp.data.name !== keyName) {\n printMessage(\n `create keys ERROR: could not create log API key ${keyName}`,\n 'error'\n );\n return null;\n }\n verboseMessage(\n `Created a new log API key [${keyName}] in ${state.getHost()}`\n );\n return resp.data;\n } catch (error) {\n printMessage(\n `create keys ERROR: create keys call returned ${error}`,\n 'error'\n );\n return null;\n }\n } catch (error) {\n printMessage(`get keys ERROR: get keys call returned ${error}`, 'error');\n }\n } catch (e) {\n printMessage(`create keys ERROR: create keys data error - ${e}`, 'error');\n return null;\n }\n}\n\nexport async function fetchLogs(\n source,\n startTs,\n endTs,\n levels,\n txid,\n ffString,\n cookie,\n nf\n) {\n try {\n // console.log(`startTs: ${startTs} endTs : ${endTs}`);\n const response = await LogApi.fetch(source, startTs, endTs, cookie);\n if (response.status < 200 || response.status > 399) {\n printMessage(\n `fetch ERROR: fetch call returned ${response.status}`,\n 'error'\n );\n return null;\n }\n const logsObject = response.data;\n let filteredLogs = [];\n const noiseFilter = nf == null ? noise : nf;\n if (Array.isArray(logsObject.result)) {\n filteredLogs = logsObject.result.filter(\n (el) =>\n !noiseFilter.includes(el.payload.logger) &&\n !noiseFilter.includes(el.type) &&\n (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) &&\n (typeof txid === 'undefined' ||\n txid === null ||\n el.payload.transactionId?.includes(txid))\n );\n }\n\n filteredLogs.forEach((e) => {\n const log = JSON.stringify(e, null, 2);\n if (ffString) {\n if (log.includes(ffString)) {\n printMessage(log, 'data');\n }\n } else {\n printMessage(log, 'data');\n }\n });\n if (logsObject.pagedResultsCookie != null) {\n await fetchLogs(\n source,\n startTs,\n endTs,\n levels,\n txid,\n ffString,\n logsObject.pagedResultsCookie,\n nf\n );\n }\n return null;\n } catch (e) {\n printMessage(`fetch ERROR: fetch data error - ${e}`, 'error');\n return `fetch ERROR: fetch data error - ${e}`;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/ops/cloud/LogOps.ts"],"names":[],"mappings":"AA4OA,wBAAgB,kBAAkB,aAEjC;AAED,wBAAgB,YAAY,CAAC,KAAK,KAAA,OAOjC;AAID,wBAAgB,mBAAmB,CAAC,GAAG,KAAA,OAStC;AAED,wBAAsB,aAAa,mBAgBlC;AAED,wBAAsB,QAAQ,CAAC,MAAM,KAAA,EAAE,MAAM,KAAA,EAAE,IAAI,KAAA,EAAE,MAAM,KAAA,EAAE,EAAE,KAAA,mBAwC9D;AAED,wBAAsB,cAAc,iBAsCnC;AAED,wBAAsB,SAAS,CAC7B,MAAM,KAAA,EACN,OAAO,KAAA,EACP,KAAK,KAAA,EACL,MAAM,KAAA,EACN,IAAI,KAAA,EACJ,QAAQ,KAAA,EACR,MAAM,KAAA,EACN,EAAE,KAAA,mBAsDH","file":"LogOps.d.ts","sourcesContent":["import { printMessage, verboseMessage } from '../utils/Console';\nimport { getCurrentTimestamp } from '../utils/ExportImportUtils';\nimport {\n createAPIKeyAndSecret,\n getAPIKeys,\n getSources,\n} from '../../api/cloud/LogApi';\n\nimport * as state from '../../shared/State';\n\nimport * as LogApi from '../../api/cloud/LogApi';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst unfilterableNoise = [\n 'text/plain', // Unfortunately, it is impossible to filter out those without excluding IDM script logging as well\n];\n\nconst miscNoise = [\n 'com.iplanet.dpro.session.operations.ServerSessionOperationStrategy',\n 'com.iplanet.dpro.session.SessionIDFactory',\n 'com.iplanet.dpro.session.share.SessionEncodeURL',\n 'com.iplanet.services.naming.WebtopNaming',\n 'com.iplanet.sso.providers.dpro.SSOProviderImpl',\n 'com.sun.identity.authentication.AuthContext',\n 'com.sun.identity.authentication.client.AuthClientUtils',\n 'com.sun.identity.authentication.config.AMAuthConfigType',\n 'com.sun.identity.authentication.config.AMAuthenticationManager',\n 'com.sun.identity.authentication.config.AMAuthLevelManager',\n 'com.sun.identity.authentication.config.AMConfiguration',\n 'com.sun.identity.authentication.jaas.LoginContext',\n 'com.sun.identity.authentication.modules.application.Application',\n 'com.sun.identity.authentication.server.AuthContextLocal',\n 'com.sun.identity.authentication.service.AMLoginContext',\n 'com.sun.identity.authentication.service.AuthContextLookup',\n 'com.sun.identity.authentication.service.AuthD',\n 'com.sun.identity.authentication.service.AuthUtils',\n 'com.sun.identity.authentication.service.DSAMECallbackHandler',\n 'com.sun.identity.authentication.service.LoginState',\n 'com.sun.identity.authentication.spi.AMLoginModule',\n 'com.sun.identity.delegation.DelegationEvaluatorImpl',\n 'com.sun.identity.idm.plugins.internal.AgentsRepo',\n 'com.sun.identity.idm.server.IdCachedServicesImpl',\n 'com.sun.identity.idm.server.IdRepoPluginsCache',\n 'com.sun.identity.idm.server.IdServicesImpl',\n 'com.sun.identity.log.spi.ISDebug',\n 'com.sun.identity.shared.encode.CookieUtils',\n 'com.sun.identity.sm.ldap.SMSLdapObject',\n 'com.sun.identity.sm.CachedSMSEntry',\n 'com.sun.identity.sm.CachedSubEntries',\n 'com.sun.identity.sm.DNMapper',\n 'com.sun.identity.sm.ServiceConfigImpl',\n 'com.sun.identity.sm.ServiceConfigManagerImpl',\n 'com.sun.identity.sm.SMSEntry',\n 'com.sun.identity.sm.SMSUtils',\n 'com.sun.identity.sm.SmsWrapperObject',\n 'oauth2',\n 'org.apache.http.client.protocol.RequestAuthCache',\n 'org.apache.http.impl.conn.PoolingHttpClientConnectionManager',\n 'org.apache.http.impl.nio.client.InternalHttpAsyncClient',\n 'org.apache.http.impl.nio.client.InternalIODispatch',\n 'org.apache.http.impl.nio.client.MainClientExec',\n 'org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionImpl',\n 'org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager',\n 'org.forgerock.audit.AuditServiceImpl',\n 'org.forgerock.oauth2.core.RealmOAuth2ProviderSettings',\n 'org.forgerock.openam.authentication.service.JAASModuleDetector',\n 'org.forgerock.openam.authentication.service.LoginContextFactory',\n 'org.forgerock.openam.blacklist.BloomFilterBlacklist',\n 'org.forgerock.openam.blacklist.CTSBlacklist',\n 'org.forgerock.openam.core.realms.impl.CachingRealmLookup',\n 'org.forgerock.openam.core.rest.authn.RestAuthCallbackHandlerManager',\n 'org.forgerock.openam.core.rest.authn.trees.AuthTrees',\n 'org.forgerock.openam.cors.CorsFilter',\n 'org.forgerock.openam.cts.CTSPersistentStoreImpl',\n 'org.forgerock.openam.cts.impl.CoreTokenAdapter',\n 'org.forgerock.openam.cts.impl.queue.AsyncResultHandler',\n 'org.forgerock.openam.cts.reaper.ReaperDeleteOnQueryResultHandler',\n 'org.forgerock.openam.headers.DisableSameSiteCookiesFilter',\n 'org.forgerock.openam.idrepo.ldap.DJLDAPv3Repo',\n 'org.forgerock.openam.rest.CsrfFilter',\n 'org.forgerock.openam.rest.restAuthenticationFilter',\n 'org.forgerock.openam.rest.fluent.CrestLoggingFilter',\n 'org.forgerock.openam.session.cts.CtsOperations',\n 'org.forgerock.openam.session.stateless.StatelessSessionManager',\n 'org.forgerock.openam.sm.datalayer.impl.ldap.ExternalLdapConfig',\n 'org.forgerock.openam.sm.datalayer.impl.ldap.LdapQueryBuilder',\n 'org.forgerock.openam.sm.datalayer.impl.SeriesTaskExecutor',\n 'org.forgerock.openam.sm.datalayer.impl.SeriesTaskExecutorThread',\n 'org.forgerock.openam.sm.datalayer.providers.LdapConnectionFactoryProvider',\n 'org.forgerock.openam.sm.file.ConfigFileSystemHandler',\n 'org.forgerock.openam.social.idp.SocialIdentityProviders',\n 'org.forgerock.openam.utils.ClientUtils',\n 'org.forgerock.opendj.ldap.CachedConnectionPool',\n 'org.forgerock.opendj.ldap.LoadBalancer',\n 'org.forgerock.secrets.keystore.KeyStoreSecretStore',\n 'org.forgerock.secrets.propertyresolver.PropertyResolverSecretStore',\n 'org.forgerock.secrets.SecretsProvider',\n];\n\nconst journeysNoise = [\n 'org.forgerock.openam.auth.trees.engine.AuthTreeExecutor',\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst journeys = [\n 'org.forgerock.openam.auth.nodes.SelectIdPNode',\n 'org.forgerock.openam.auth.nodes.ValidatedPasswordNode',\n 'org.forgerock.openam.auth.nodes.ValidatedUsernameNode',\n 'org.forgerock.openam.auth.trees.engine.AuthTreeExecutor',\n];\n\nconst samlNoise = [\n 'com.sun.identity.cot.COTCache',\n 'com.sun.identity.plugin.configuration.impl.ConfigurationInstanceImpl',\n 'com.sun.identity.saml2.meta.SAML2MetaCache',\n 'com.sun.identity.saml2.profile.CacheCleanUpRunnable',\n 'org.apache.xml.security.keys.KeyInfo',\n 'org.apache.xml.security.signature.XMLSignature',\n 'org.apache.xml.security.utils.SignerOutputStream',\n 'org.apache.xml.security.utils.resolver.ResourceResolver',\n 'org.apache.xml.security.utils.resolver.implementations.ResolverFragment',\n 'org.apache.xml.security.algorithms.JCEMapper',\n 'org.apache.xml.security.algorithms.implementations.SignatureBaseRSA',\n 'org.apache.xml.security.algorithms.SignatureAlgorithm',\n 'org.apache.xml.security.utils.ElementProxy',\n 'org.apache.xml.security.transforms.Transforms',\n 'org.apache.xml.security.utils.DigesterOutputStream',\n 'org.apache.xml.security.signature.Reference',\n 'org.apache.xml.security.signature.Manifest',\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst saml = [\n 'jsp.saml2.spAssertionConsumer',\n 'com.sun.identity.saml.common.SAMLUtils',\n 'com.sun.identity.saml2.common.SAML2Utils',\n 'com.sun.identity.saml2.meta.SAML2MetaManager',\n 'com.sun.identity.saml2.xmlsig.FMSigProvider',\n];\n\nconst noise = miscNoise.concat(samlNoise).concat(journeysNoise);\n\nconst numLogLevelMap = {\n 0: ['SEVERE', 'ERROR', 'FATAL'],\n 1: ['WARNING', 'WARN', 'CONFIG'],\n 2: ['INFO', 'INFORMATION'],\n 3: ['DEBUG', 'FINE', 'FINER', 'FINEST'],\n 4: ['ALL'],\n};\n\nconst logLevelMap = {\n SEVERE: ['SEVERE', 'ERROR', 'FATAL'],\n ERROR: ['SEVERE', 'ERROR', 'FATAL'],\n FATAL: ['SEVERE', 'ERROR', 'FATAL'],\n WARN: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n WARNING: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n CONFIG: ['SEVERE', 'ERROR', 'FATAL', 'WARNING', 'WARN', 'CONFIG'],\n INFO: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n ],\n INFORMATION: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n ],\n DEBUG: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINE: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINER: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n FINEST: [\n 'SEVERE',\n 'ERROR',\n 'FATAL',\n 'WARNING',\n 'WARN',\n 'CONFIG',\n 'INFO',\n 'INFORMATION',\n 'DEBUG',\n 'FINE',\n 'FINER',\n 'FINEST',\n ],\n ALL: ['ALL'],\n};\n\nexport function defaultNoiseFilter() {\n return noise;\n}\n\nexport function resolveLevel(level) {\n // const levels = ['FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE', 'ALL'];\n // levels.splice(levels.indexOf(levelName) + 1, levels.length);\n if (Number.isNaN(parseInt(level, 10))) {\n return logLevelMap[level];\n }\n return logLevelMap[numLogLevelMap[level][0]];\n}\n\n// It seems that the undesirable 'text/plain' logs start with a date, not a LEVEL\n// Therefore, for those, this function returns null, and thus filters out the undesirable\nexport function resolvePayloadLevel(log) {\n try {\n return log.type !== 'text/plain'\n ? log.payload.level\n : log.payload.match(/^([^:]*):/)[1];\n } catch (e) {\n // Fail-safe for no group match\n return null;\n }\n}\n\nexport async function getLogSources() {\n const sources = [];\n await getSources()\n .then((response) => {\n response.data.result.forEach((item) => {\n sources.push(item);\n });\n })\n .catch((error) => {\n printMessage(\n `getSources ERROR: get log sources call returned ${error}}`,\n 'error'\n );\n return [];\n });\n return sources;\n}\n\nexport async function tailLogs(source, levels, txid, cookie, nf) {\n try {\n const response = await LogApi.tail(source, cookie);\n if (response.status < 200 || response.status > 399) {\n printMessage(\n `tail ERROR: tail call returned ${response.status}`,\n 'error'\n );\n return null;\n }\n // if (!cookie) {\n // await saveConnection();\n // }\n const logsObject = response.data;\n let filteredLogs = [];\n const noiseFilter = nf == null ? noise : nf;\n if (Array.isArray(logsObject.result)) {\n filteredLogs = logsObject.result.filter(\n (el) =>\n !noiseFilter.includes(el.payload.logger) &&\n !noiseFilter.includes(el.type) &&\n (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) &&\n (typeof txid === 'undefined' ||\n txid === null ||\n el.payload.transactionId?.includes(txid))\n );\n }\n\n filteredLogs.forEach((e) => {\n printMessage(JSON.stringify(e), 'data');\n });\n\n setTimeout(() => {\n tailLogs(source, levels, txid, logsObject.result.pagedResultsCookie, nf);\n }, 5000);\n return null;\n } catch (e) {\n printMessage(`tail ERROR: tail data error - ${e}`, 'error');\n return `tail ERROR: tail data error - ${e}`;\n }\n}\n\nexport async function provisionCreds() {\n try {\n let keyName = `frodo-${state.getUsername()}`;\n try {\n const response = await getAPIKeys();\n for (const k of response.result) {\n if (k.name === keyName) {\n // append current timestamp to name if the named key already exists\n keyName = `${keyName}-${getCurrentTimestamp()}`;\n }\n }\n try {\n const resp = await createAPIKeyAndSecret(keyName);\n if (resp.data.name !== keyName) {\n printMessage(\n `create keys ERROR: could not create log API key ${keyName}`,\n 'error'\n );\n return null;\n }\n verboseMessage(\n `Created a new log API key [${keyName}] in ${state.getHost()}`\n );\n return resp.data;\n } catch (error) {\n printMessage(\n `create keys ERROR: create keys call returned ${error}`,\n 'error'\n );\n return null;\n }\n } catch (error) {\n printMessage(`get keys ERROR: get keys call returned ${error}`, 'error');\n }\n } catch (e) {\n printMessage(`create keys ERROR: create keys data error - ${e}`, 'error');\n return null;\n }\n}\n\nexport async function fetchLogs(\n source,\n startTs,\n endTs,\n levels,\n txid,\n ffString,\n cookie,\n nf\n) {\n try {\n // console.log(`startTs: ${startTs} endTs : ${endTs}`);\n const response = await LogApi.fetch(source, startTs, endTs, cookie);\n if (response.status < 200 || response.status > 399) {\n printMessage(\n `fetch ERROR: fetch call returned ${response.status}`,\n 'error'\n );\n return null;\n }\n const logsObject = response.data;\n let filteredLogs = [];\n const noiseFilter = nf == null ? noise : nf;\n if (Array.isArray(logsObject.result)) {\n filteredLogs = logsObject.result.filter(\n (el) =>\n !noiseFilter.includes(el.payload.logger) &&\n !noiseFilter.includes(el.type) &&\n (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) &&\n (typeof txid === 'undefined' ||\n txid === null ||\n el.payload.transactionId?.includes(txid))\n );\n }\n\n filteredLogs.forEach((e) => {\n const log = JSON.stringify(e, null, 2);\n if (ffString) {\n if (log.includes(ffString)) {\n printMessage(log, 'data');\n }\n } else {\n printMessage(log, 'data');\n }\n });\n if (logsObject.pagedResultsCookie != null) {\n await fetchLogs(\n source,\n startTs,\n endTs,\n levels,\n txid,\n ffString,\n logsObject.pagedResultsCookie,\n nf\n );\n }\n return null;\n } catch (e) {\n printMessage(`fetch ERROR: fetch data error - ${e}`, 'error');\n return `fetch ERROR: fetch data error - ${e}`;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ops/cloud/StartupOps.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CA8BxD;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,SAAiB,oBAmDzE","file":"StartupOps.d.ts","sourcesContent":["import {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getSecrets } from '../../api/cloud/SecretsApi';\nimport {\n getStatus,\n initiateRestart,\n RestartStatus,\n} from '../../api/cloud/StartupApi';\nimport { getVariables } from '../../api/cloud/VariablesApi';\n\n/**\n * Updates that need to be applied.\n */\nexport interface Updates {\n /**\n * Array of secrets that need applying\n */\n secrets?: unknown[];\n /**\n * Array of variables that need applying\n */\n variables?: unknown[];\n}\n\n/**\n * Check for updates that need applying\n * @returns {Promise<boolean>} true if there are updates that need to be applied, false otherwise\n */\nexport async function checkForUpdates(): Promise<Updates> {\n const updates: Updates = { secrets: [], variables: [] };\n createProgressIndicator(\n undefined,\n `Checking for updates to apply...`,\n 'indeterminate'\n );\n try {\n updates.secrets = (await getSecrets()).result.filter(\n (secret: { loaded: unknown }) => !secret.loaded\n );\n updates.variables = (await getVariables()).result.filter(\n (variable: { loaded: unknown }) => !variable.loaded\n );\n } catch (error) {\n stopProgressIndicator(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n const updateCount = updates.secrets?.length + updates.variables?.length || 0;\n if (updateCount > 0) {\n stopProgressIndicator(\n `${updateCount} update(s) need to be applied`,\n 'success'\n );\n } else {\n stopProgressIndicator(`No updates need to be applied`, 'success');\n }\n return updates;\n}\n\n/**\n * Apply updates\n * @param {boolean} wait wait for the operation to complete or not\n * @param {number} timeout timeout in milliseconds\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function applyUpdates(wait: boolean, timeout = 10 * 60 * 1000) {\n createProgressIndicator(undefined, `Applying updates...`, 'indeterminate');\n try {\n let status = await initiateRestart();\n if (wait) {\n const start = new Date().getTime();\n let runtime = 0;\n while (\n status !== RestartStatus.ready &&\n start + timeout > new Date().getTime()\n ) {\n // eslint-disable-next-line no-await-in-loop, no-promise-executor-return\n await new Promise((resolve) => setTimeout(resolve, 5000));\n // eslint-disable-next-line no-await-in-loop\n status = await getStatus();\n runtime = new Date().getTime() - start;\n updateProgressIndicator(`${status} (${Math.round(runtime / 1000)}s)`);\n }\n if (runtime < timeout) {\n stopProgressIndicator(\n `Updates applied in ${Math.round(\n runtime / 1000\n )}s with final status: ${status}`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n `Updates timed out after ${Math.round(\n runtime / 1000\n )}s with final status: ${status}`,\n 'warn'\n );\n return false;\n }\n } else {\n stopProgressIndicator(\n `Updates are being applied. Changes may take up to 10 minutes to propagate, during which time you will not be able to make further updates.`,\n 'success'\n );\n return true;\n }\n } catch (error) {\n stopProgressIndicator(\n `Error: ${error.response?.data?.code || error} - ${\n error.response?.data?.message\n }`,\n 'fail'\n );\n return false;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/ops/cloud/StartupOps.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CA8BxD;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,SAAiB,oBAoEzE","file":"StartupOps.d.ts","sourcesContent":["import {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getSecrets } from '../../api/cloud/SecretsApi';\nimport {\n getStatus,\n initiateRestart,\n RestartStatus,\n} from '../../api/cloud/StartupApi';\nimport { getVariables } from '../../api/cloud/VariablesApi';\n\n/**\n * Updates that need to be applied.\n */\nexport interface Updates {\n /**\n * Array of secrets that need applying\n */\n secrets?: unknown[];\n /**\n * Array of variables that need applying\n */\n variables?: unknown[];\n}\n\n/**\n * Check for updates that need applying\n * @returns {Promise<boolean>} true if there are updates that need to be applied, false otherwise\n */\nexport async function checkForUpdates(): Promise<Updates> {\n const updates: Updates = { secrets: [], variables: [] };\n createProgressIndicator(\n undefined,\n `Checking for updates to apply...`,\n 'indeterminate'\n );\n try {\n updates.secrets = (await getSecrets()).result.filter(\n (secret: { loaded: unknown }) => !secret.loaded\n );\n updates.variables = (await getVariables()).result.filter(\n (variable: { loaded: unknown }) => !variable.loaded\n );\n } catch (error) {\n stopProgressIndicator(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n const updateCount = updates.secrets?.length + updates.variables?.length || 0;\n if (updateCount > 0) {\n stopProgressIndicator(\n `${updateCount} update(s) need to be applied`,\n 'success'\n );\n } else {\n stopProgressIndicator(`No updates need to be applied`, 'success');\n }\n return updates;\n}\n\n/**\n * Apply updates\n * @param {boolean} wait wait for the operation to complete or not\n * @param {number} timeout timeout in milliseconds\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function applyUpdates(wait: boolean, timeout = 10 * 60 * 1000) {\n createProgressIndicator(undefined, `Applying updates...`, 'indeterminate');\n try {\n let status = await initiateRestart();\n if (wait) {\n const start = new Date().getTime();\n let runtime = 0;\n let errors = 0;\n const maxErrors = 3;\n while (\n status !== RestartStatus.ready &&\n start + timeout > new Date().getTime()\n ) {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n try {\n status = await getStatus();\n\n // reset errors after successful status call\n if (errors) errors = 0;\n\n runtime = new Date().getTime() - start;\n updateProgressIndicator(`${status} (${Math.round(runtime / 1000)}s)`);\n } catch (error) {\n errors++;\n if (errors > maxErrors) {\n throw error;\n }\n runtime = new Date().getTime() - start;\n updateProgressIndicator(\n `${error.message} - retry ${errors}/${maxErrors} (${Math.round(\n runtime / 1000\n )}s)`\n );\n }\n }\n if (runtime < timeout) {\n stopProgressIndicator(\n `Updates applied in ${Math.round(\n runtime / 1000\n )}s with final status: ${status}`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n `Updates timed out after ${Math.round(\n runtime / 1000\n )}s with final status: ${status}`,\n 'warn'\n );\n return false;\n }\n } else {\n stopProgressIndicator(\n `Updates are being applied. Changes may take up to 10 minutes to propagate, during which time you will not be able to make further updates.`,\n 'success'\n );\n return true;\n }\n } catch (error) {\n stopProgressIndicator(\n `Error: ${error.response?.data?.code || error} - ${\n error.response?.data?.message\n }`,\n 'fail'\n );\n return false;\n }\n}\n"]}