@rockcarver/frodo-lib 0.15.2 → 0.16.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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.16.0] - 2022-10-19
11
+
12
+ ## [0.16.1] - 2022-10-18
13
+
14
+ ### Changed
15
+
16
+ - Changelog entry update to trigger minor release
17
+
18
+ ## [0.16.0] - 2022-10-18
19
+
20
+ ### Added
21
+
22
+ - Ability to fetch historical logs from ID Cloud
23
+
10
24
  ## [0.15.2] - 2022-10-17
11
25
 
12
26
  ### Added
@@ -653,7 +667,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
653
667
  - Fixed problem with adding connection profiles
654
668
  - Miscellaneous bug fixes
655
669
 
656
- [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.15.2...HEAD
670
+ [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.16.0...HEAD
671
+
672
+ [0.16.0]: https://github.com/rockcarver/frodo-lib/compare/v0.15.3-0...v0.16.0
673
+
674
+ [0.15.3-0]: https://github.com/rockcarver/frodo-lib/compare/v0.15.2...v0.15.3-0
657
675
 
658
676
  [0.15.2]: https://github.com/rockcarver/frodo-lib/compare/v0.15.1...v0.15.2
659
677
 
package/cjs/api/LogApi.js CHANGED
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createAPIKeyAndSecret = createAPIKeyAndSecret;
7
+ exports.fetch = fetch;
7
8
  exports.getAPIKeys = getAPIKeys;
8
9
  exports.getSources = getSources;
9
10
  exports.tail = tail;
@@ -23,6 +24,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
23
24
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
24
25
 
25
26
  var logsTailURLTemplate = '%s/monitoring/logs/tail?source=%s';
27
+ var logsFetchURLTemplate = '%s/monitoring/logs?source=%s&beginTime=%s&endTime=%s';
26
28
  var logsSourcesURLTemplate = '%s/monitoring/logs/sources';
27
29
  var logsCreateAPIKeyAndSecretURLTemplate = '%s/keys?_action=create';
28
30
  var logsGetAPIKeysURLTemplate = '%s/keys';
@@ -84,4 +86,23 @@ function _createAPIKeyAndSecret() {
84
86
  });
85
87
  return _createAPIKeyAndSecret.apply(this, arguments);
86
88
  }
89
+
90
+ function fetch(_x4, _x5, _x6, _x7) {
91
+ return _fetch.apply(this, arguments);
92
+ }
93
+
94
+ function _fetch() {
95
+ _fetch = _asyncToGenerator(function* (source, startTs, endTs, cookie) {
96
+ var urlString = _util.default.format(logsFetchURLTemplate, (0, _ApiUtils.getTenantURL)(_SessionStorage.default.session.getTenant()), encodeURIComponent(source), startTs, endTs);
97
+
98
+ if (cookie) {
99
+ urlString += "&_pagedResultsCookie=".concat(encodeURIComponent(cookie));
100
+ }
101
+
102
+ return (0, _BaseApi.generateLogApi)({
103
+ timeout: 60000
104
+ }).get(urlString);
105
+ });
106
+ return _fetch.apply(this, arguments);
107
+ }
87
108
  //# sourceMappingURL=LogApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LogApi.js","names":["logsTailURLTemplate","logsSourcesURLTemplate","logsCreateAPIKeyAndSecretURLTemplate","logsGetAPIKeysURLTemplate","tail","source","cookie","urlString","util","format","getTenantURL","storage","session","getTenant","encodeURIComponent","generateLogApi","get","getAPIKeys","generateLogKeysApi","getSources","createAPIKeyAndSecret","keyName","post","name"],"sources":["api/LogApi.ts"],"sourcesContent":["import util from 'util';\nimport { generateLogApi, generateLogKeysApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport storage from '../storage/SessionStorage';\n\nconst logsTailURLTemplate = '%s/monitoring/logs/tail?source=%s';\nconst logsSourcesURLTemplate = '%s/monitoring/logs/sources';\nconst logsCreateAPIKeyAndSecretURLTemplate = '%s/keys?_action=create';\nconst logsGetAPIKeysURLTemplate = '%s/keys';\n\nexport async function tail(source, cookie) {\n let urlString = util.format(\n logsTailURLTemplate,\n getTenantURL(storage.session.getTenant()),\n encodeURIComponent(source)\n );\n if (cookie) {\n urlString += `&_pagedResultsCookie=${encodeURIComponent(cookie)}`;\n }\n return generateLogApi().get(urlString);\n}\n\nexport async function getAPIKeys() {\n const urlString = util.format(\n logsGetAPIKeysURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogKeysApi().get(urlString);\n}\n\nexport async function getSources() {\n const urlString = util.format(\n logsSourcesURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogApi().get(urlString);\n}\n\nexport async function createAPIKeyAndSecret(keyName) {\n const urlString = util.format(\n logsCreateAPIKeyAndSecretURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogKeysApi().post(urlString, { name: keyName });\n}\n"],"mappings":";;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,mBAAmB,GAAG,mCAA5B;AACA,IAAMC,sBAAsB,GAAG,4BAA/B;AACA,IAAMC,oCAAoC,GAAG,wBAA7C;AACA,IAAMC,yBAAyB,GAAG,SAAlC;;SAEsBC,I;;;;;4BAAf,WAAoBC,MAApB,EAA4BC,MAA5B,EAAoC;IACzC,IAAIC,SAAS,GAAGC,aAAA,CAAKC,MAAL,CACdT,mBADc,EAEd,IAAAU,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFc,EAGdC,kBAAkB,CAACT,MAAD,CAHJ,CAAhB;;IAKA,IAAIC,MAAJ,EAAY;MACVC,SAAS,mCAA4BO,kBAAkB,CAACR,MAAD,CAA9C,CAAT;IACD;;IACD,OAAO,IAAAS,uBAAA,IAAiBC,GAAjB,CAAqBT,SAArB,CAAP;EACD,C;;;;SAEqBU,U;;;;;kCAAf,aAA4B;IACjC,IAAMV,SAAS,GAAGC,aAAA,CAAKC,MAAL,CAChBN,yBADgB,EAEhB,IAAAO,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFgB,CAAlB;;IAIA,OAAO,IAAAK,2BAAA,IAAqBF,GAArB,CAAyBT,SAAzB,CAAP;EACD,C;;;;SAEqBY,U;;;;;kCAAf,aAA4B;IACjC,IAAMZ,SAAS,GAAGC,aAAA,CAAKC,MAAL,CAChBR,sBADgB,EAEhB,IAAAS,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFgB,CAAlB;;IAIA,OAAO,IAAAE,uBAAA,IAAiBC,GAAjB,CAAqBT,SAArB,CAAP;EACD,C;;;;SAEqBa,qB;;;;;6CAAf,WAAqCC,OAArC,EAA8C;IACnD,IAAMd,SAAS,GAAGC,aAAA,CAAKC,MAAL,CAChBP,oCADgB,EAEhB,IAAAQ,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFgB,CAAlB;;IAIA,OAAO,IAAAK,2BAAA,IAAqBI,IAArB,CAA0Bf,SAA1B,EAAqC;MAAEgB,IAAI,EAAEF;IAAR,CAArC,CAAP;EACD,C"}
1
+ {"version":3,"file":"LogApi.js","names":["logsTailURLTemplate","logsFetchURLTemplate","logsSourcesURLTemplate","logsCreateAPIKeyAndSecretURLTemplate","logsGetAPIKeysURLTemplate","tail","source","cookie","urlString","util","format","getTenantURL","storage","session","getTenant","encodeURIComponent","generateLogApi","get","getAPIKeys","generateLogKeysApi","getSources","createAPIKeyAndSecret","keyName","post","name","fetch","startTs","endTs","timeout"],"sources":["api/LogApi.ts"],"sourcesContent":["import util from 'util';\nimport { generateLogApi, generateLogKeysApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport storage from '../storage/SessionStorage';\n\nconst logsTailURLTemplate = '%s/monitoring/logs/tail?source=%s';\nconst logsFetchURLTemplate =\n '%s/monitoring/logs?source=%s&beginTime=%s&endTime=%s';\nconst logsSourcesURLTemplate = '%s/monitoring/logs/sources';\nconst logsCreateAPIKeyAndSecretURLTemplate = '%s/keys?_action=create';\nconst logsGetAPIKeysURLTemplate = '%s/keys';\n\nexport async function tail(source, cookie) {\n let urlString = util.format(\n logsTailURLTemplate,\n getTenantURL(storage.session.getTenant()),\n encodeURIComponent(source)\n );\n if (cookie) {\n urlString += `&_pagedResultsCookie=${encodeURIComponent(cookie)}`;\n }\n return generateLogApi().get(urlString);\n}\n\nexport async function getAPIKeys() {\n const urlString = util.format(\n logsGetAPIKeysURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogKeysApi().get(urlString);\n}\n\nexport async function getSources() {\n const urlString = util.format(\n logsSourcesURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogApi().get(urlString);\n}\n\nexport async function createAPIKeyAndSecret(keyName) {\n const urlString = util.format(\n logsCreateAPIKeyAndSecretURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogKeysApi().post(urlString, { name: keyName });\n}\n\nexport async function fetch(source, startTs, endTs, cookie) {\n let urlString = util.format(\n logsFetchURLTemplate,\n getTenantURL(storage.session.getTenant()),\n encodeURIComponent(source),\n startTs,\n endTs\n );\n if (cookie) {\n urlString += `&_pagedResultsCookie=${encodeURIComponent(cookie)}`;\n }\n return generateLogApi({ timeout: 60000 }).get(urlString);\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,mBAAmB,GAAG,mCAA5B;AACA,IAAMC,oBAAoB,GACxB,sDADF;AAEA,IAAMC,sBAAsB,GAAG,4BAA/B;AACA,IAAMC,oCAAoC,GAAG,wBAA7C;AACA,IAAMC,yBAAyB,GAAG,SAAlC;;SAEsBC,I;;;;;4BAAf,WAAoBC,MAApB,EAA4BC,MAA5B,EAAoC;IACzC,IAAIC,SAAS,GAAGC,aAAA,CAAKC,MAAL,CACdV,mBADc,EAEd,IAAAW,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFc,EAGdC,kBAAkB,CAACT,MAAD,CAHJ,CAAhB;;IAKA,IAAIC,MAAJ,EAAY;MACVC,SAAS,mCAA4BO,kBAAkB,CAACR,MAAD,CAA9C,CAAT;IACD;;IACD,OAAO,IAAAS,uBAAA,IAAiBC,GAAjB,CAAqBT,SAArB,CAAP;EACD,C;;;;SAEqBU,U;;;;;kCAAf,aAA4B;IACjC,IAAMV,SAAS,GAAGC,aAAA,CAAKC,MAAL,CAChBN,yBADgB,EAEhB,IAAAO,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFgB,CAAlB;;IAIA,OAAO,IAAAK,2BAAA,IAAqBF,GAArB,CAAyBT,SAAzB,CAAP;EACD,C;;;;SAEqBY,U;;;;;kCAAf,aAA4B;IACjC,IAAMZ,SAAS,GAAGC,aAAA,CAAKC,MAAL,CAChBR,sBADgB,EAEhB,IAAAS,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFgB,CAAlB;;IAIA,OAAO,IAAAE,uBAAA,IAAiBC,GAAjB,CAAqBT,SAArB,CAAP;EACD,C;;;;SAEqBa,qB;;;;;6CAAf,WAAqCC,OAArC,EAA8C;IACnD,IAAMd,SAAS,GAAGC,aAAA,CAAKC,MAAL,CAChBP,oCADgB,EAEhB,IAAAQ,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFgB,CAAlB;;IAIA,OAAO,IAAAK,2BAAA,IAAqBI,IAArB,CAA0Bf,SAA1B,EAAqC;MAAEgB,IAAI,EAAEF;IAAR,CAArC,CAAP;EACD,C;;;;SAEqBG,K;;;;;6BAAf,WAAqBnB,MAArB,EAA6BoB,OAA7B,EAAsCC,KAAtC,EAA6CpB,MAA7C,EAAqD;IAC1D,IAAIC,SAAS,GAAGC,aAAA,CAAKC,MAAL,CACdT,oBADc,EAEd,IAAAU,sBAAA,EAAaC,uBAAA,CAAQC,OAAR,CAAgBC,SAAhB,EAAb,CAFc,EAGdC,kBAAkB,CAACT,MAAD,CAHJ,EAIdoB,OAJc,EAKdC,KALc,CAAhB;;IAOA,IAAIpB,MAAJ,EAAY;MACVC,SAAS,mCAA4BO,kBAAkB,CAACR,MAAD,CAA9C,CAAT;IACD;;IACD,OAAO,IAAAS,uBAAA,EAAe;MAAEY,OAAO,EAAE;IAAX,CAAf,EAAmCX,GAAnC,CAAuCT,SAAvC,CAAP;EACD,C"}
package/cjs/ops/LogOps.js CHANGED
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.defaultNoiseFilter = defaultNoiseFilter;
7
+ exports.fetchLogs = fetchLogs;
7
8
  exports.getLogSources = getLogSources;
8
9
  exports.provisionCreds = provisionCreds;
9
10
  exports.resolveLevel = resolveLevel;
@@ -184,4 +185,52 @@ function _provisionCreds() {
184
185
  });
185
186
  return _provisionCreds.apply(this, arguments);
186
187
  }
188
+
189
+ function fetchLogs(_x6, _x7, _x8, _x9, _x10, _x11, _x12, _x13) {
190
+ return _fetchLogs.apply(this, arguments);
191
+ }
192
+
193
+ function _fetchLogs() {
194
+ _fetchLogs = _asyncToGenerator(function* (source, startTs, endTs, levels, txid, ffString, cookie, nf) {
195
+ try {
196
+ // console.log(`startTs: ${startTs} endTs : ${endTs}`);
197
+ var response = yield LogApi.fetch(source, startTs, endTs, cookie);
198
+
199
+ if (response.status < 200 || response.status > 399) {
200
+ (0, _Console.printMessage)("fetch ERROR: fetch call returned ".concat(response.status), 'error');
201
+ return null;
202
+ }
203
+
204
+ var logsObject = response.data;
205
+ var filteredLogs = [];
206
+ var noiseFilter = nf == null ? noise : nf;
207
+
208
+ if (Array.isArray(logsObject.result)) {
209
+ filteredLogs = logsObject.result.filter(el => !noiseFilter.includes(el.payload.logger) && !noiseFilter.includes(el.type) && (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) && (typeof txid === 'undefined' || txid === null || el.payload.transactionId.includes(txid)));
210
+ }
211
+
212
+ filteredLogs.forEach(e => {
213
+ var log = JSON.stringify(e, null, 2);
214
+
215
+ if (ffString) {
216
+ if (log.includes(ffString)) {
217
+ (0, _Console.printMessage)(log, 'data');
218
+ }
219
+ } else {
220
+ (0, _Console.printMessage)(log, 'data');
221
+ }
222
+ });
223
+
224
+ if (logsObject.pagedResultsCookie != null) {
225
+ yield fetchLogs(source, startTs, endTs, levels, txid, ffString, logsObject.pagedResultsCookie, nf);
226
+ }
227
+
228
+ return null;
229
+ } catch (e) {
230
+ (0, _Console.printMessage)("fetch ERROR: fetch data error - ".concat(e), 'error');
231
+ return "fetch ERROR: fetch data error - ".concat(e);
232
+ }
233
+ });
234
+ return _fetchLogs.apply(this, arguments);
235
+ }
187
236
  //# sourceMappingURL=LogOps.js.map
@@ -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","storage","session","getUsername","getAPIKeys","k","name","getCurrentTimestamp","createAPIKeyAndSecret","resp","getTenant"],"sources":["ops/LogOps.ts"],"sourcesContent":["import { printMessage } from './utils/Console';\nimport { getCurrentTimestamp } from './utils/ExportImportUtils';\nimport { createAPIKeyAndSecret, getAPIKeys, getSources } from '../api/LogApi';\n\nimport storage from '../storage/SessionStorage';\n\nimport * as LogApi from '../api/LogApi';\n\n// eslint-disable-next-line 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 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 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-${storage.session.getUsername()}`;\n return getAPIKeys()\n .then((response) => {\n response.data.result.forEach((k) => {\n if (k.name === keyName) {\n // append current timestamp to name if the named key already exists\n keyName = `${keyName}-${getCurrentTimestamp()}`;\n }\n });\n return createAPIKeyAndSecret(keyName)\n .then((resp) => {\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 printMessage(\n `Created a new log API key [${keyName}] in ${storage.session.getTenant()}`\n );\n return resp.data;\n })\n .catch((error) => {\n printMessage(\n `create keys ERROR: create keys call returned ${error}`,\n 'error'\n );\n return null;\n });\n })\n .catch((error) => {\n printMessage(\n `get keys ERROR: get keys call returned ${error}`,\n 'error'\n );\n });\n } catch (e) {\n printMessage(`create keys ERROR: create keys data error - ${e}`, 'error');\n return null;\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","storage","session","getUsername","getAPIKeys","k","name","getCurrentTimestamp","createAPIKeyAndSecret","resp","getTenant","fetchLogs","startTs","endTs","ffString","fetch"],"sources":["ops/LogOps.ts"],"sourcesContent":["import { printMessage } from './utils/Console';\nimport { getCurrentTimestamp } from './utils/ExportImportUtils';\nimport { createAPIKeyAndSecret, getAPIKeys, getSources } from '../api/LogApi';\n\nimport storage from '../storage/SessionStorage';\n\nimport * as LogApi from '../api/LogApi';\n\n// eslint-disable-next-line 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 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 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-${storage.session.getUsername()}`;\n return getAPIKeys()\n .then((response) => {\n response.data.result.forEach((k) => {\n if (k.name === keyName) {\n // append current timestamp to name if the named key already exists\n keyName = `${keyName}-${getCurrentTimestamp()}`;\n }\n });\n return createAPIKeyAndSecret(keyName)\n .then((resp) => {\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 printMessage(\n `Created a new log API key [${keyName}] in ${storage.session.getTenant()}`\n );\n return resp.data;\n })\n .catch((error) => {\n printMessage(\n `create keys ERROR: create keys call returned ${error}`,\n 'error'\n );\n return null;\n });\n })\n .catch((error) => {\n printMessage(\n `get keys ERROR: get keys call returned ${error}`,\n 'error'\n );\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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"}
@@ -3,6 +3,7 @@ import { generateLogApi, generateLogKeysApi } from './BaseApi';
3
3
  import { getTenantURL } from './utils/ApiUtils';
4
4
  import storage from '../storage/SessionStorage';
5
5
  const logsTailURLTemplate = '%s/monitoring/logs/tail?source=%s';
6
+ const logsFetchURLTemplate = '%s/monitoring/logs?source=%s&beginTime=%s&endTime=%s';
6
7
  const logsSourcesURLTemplate = '%s/monitoring/logs/sources';
7
8
  const logsCreateAPIKeyAndSecretURLTemplate = '%s/keys?_action=create';
8
9
  const logsGetAPIKeysURLTemplate = '%s/keys';
@@ -29,4 +30,15 @@ export async function createAPIKeyAndSecret(keyName) {
29
30
  name: keyName
30
31
  });
31
32
  }
33
+ export async function fetch(source, startTs, endTs, cookie) {
34
+ let urlString = util.format(logsFetchURLTemplate, getTenantURL(storage.session.getTenant()), encodeURIComponent(source), startTs, endTs);
35
+
36
+ if (cookie) {
37
+ urlString += `&_pagedResultsCookie=${encodeURIComponent(cookie)}`;
38
+ }
39
+
40
+ return generateLogApi({
41
+ timeout: 60000
42
+ }).get(urlString);
43
+ }
32
44
  //# sourceMappingURL=LogApi.js.map
@@ -132,4 +132,44 @@ export async function provisionCreds() {
132
132
  return null;
133
133
  }
134
134
  }
135
+ export async function fetchLogs(source, startTs, endTs, levels, txid, ffString, cookie, nf) {
136
+ try {
137
+ // console.log(`startTs: ${startTs} endTs : ${endTs}`);
138
+ const response = await LogApi.fetch(source, startTs, endTs, cookie);
139
+
140
+ if (response.status < 200 || response.status > 399) {
141
+ printMessage(`fetch ERROR: fetch call returned ${response.status}`, 'error');
142
+ return null;
143
+ }
144
+
145
+ const logsObject = response.data;
146
+ let filteredLogs = [];
147
+ const noiseFilter = nf == null ? noise : nf;
148
+
149
+ if (Array.isArray(logsObject.result)) {
150
+ filteredLogs = logsObject.result.filter(el => !noiseFilter.includes(el.payload.logger) && !noiseFilter.includes(el.type) && (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) && (typeof txid === 'undefined' || txid === null || el.payload.transactionId.includes(txid)));
151
+ }
152
+
153
+ filteredLogs.forEach(e => {
154
+ const log = JSON.stringify(e, null, 2);
155
+
156
+ if (ffString) {
157
+ if (log.includes(ffString)) {
158
+ printMessage(log, 'data');
159
+ }
160
+ } else {
161
+ printMessage(log, 'data');
162
+ }
163
+ });
164
+
165
+ if (logsObject.pagedResultsCookie != null) {
166
+ await fetchLogs(source, startTs, endTs, levels, txid, ffString, logsObject.pagedResultsCookie, nf);
167
+ }
168
+
169
+ return null;
170
+ } catch (e) {
171
+ printMessage(`fetch ERROR: fetch data error - ${e}`, 'error');
172
+ return `fetch ERROR: fetch data error - ${e}`;
173
+ }
174
+ }
135
175
  //# sourceMappingURL=LogOps.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-lib",
3
- "version": "0.15.2",
3
+ "version": "0.16.0",
4
4
  "type": "commonjs",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.mjs",
@@ -2,3 +2,4 @@ export declare function tail(source: any, cookie: any): Promise<import("axios").
2
2
  export declare function getAPIKeys(): Promise<import("axios").AxiosResponse<any, any>>;
3
3
  export declare function getSources(): Promise<import("axios").AxiosResponse<any, any>>;
4
4
  export declare function createAPIKeyAndSecret(keyName: any): Promise<import("axios").AxiosResponse<any, any>>;
5
+ export declare function fetch(source: any, startTs: any, endTs: any, cookie: any): Promise<import("axios").AxiosResponse<any, any>>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/LogApi.ts"],"names":[],"mappings":"AAUA,wBAAsB,IAAI,CAAC,MAAM,KAAA,EAAE,MAAM,KAAA,oDAUxC;AAED,wBAAsB,UAAU,qDAM/B;AAED,wBAAsB,UAAU,qDAM/B;AAED,wBAAsB,qBAAqB,CAAC,OAAO,KAAA,oDAMlD","file":"LogApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateLogApi, generateLogKeysApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport storage from '../storage/SessionStorage';\n\nconst logsTailURLTemplate = '%s/monitoring/logs/tail?source=%s';\nconst logsSourcesURLTemplate = '%s/monitoring/logs/sources';\nconst logsCreateAPIKeyAndSecretURLTemplate = '%s/keys?_action=create';\nconst logsGetAPIKeysURLTemplate = '%s/keys';\n\nexport async function tail(source, cookie) {\n let urlString = util.format(\n logsTailURLTemplate,\n getTenantURL(storage.session.getTenant()),\n encodeURIComponent(source)\n );\n if (cookie) {\n urlString += `&_pagedResultsCookie=${encodeURIComponent(cookie)}`;\n }\n return generateLogApi().get(urlString);\n}\n\nexport async function getAPIKeys() {\n const urlString = util.format(\n logsGetAPIKeysURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogKeysApi().get(urlString);\n}\n\nexport async function getSources() {\n const urlString = util.format(\n logsSourcesURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogApi().get(urlString);\n}\n\nexport async function createAPIKeyAndSecret(keyName) {\n const urlString = util.format(\n logsCreateAPIKeyAndSecretURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogKeysApi().post(urlString, { name: keyName });\n}\n"]}
1
+ {"version":3,"sources":["../src/api/LogApi.ts"],"names":[],"mappings":"AAYA,wBAAsB,IAAI,CAAC,MAAM,KAAA,EAAE,MAAM,KAAA,oDAUxC;AAED,wBAAsB,UAAU,qDAM/B;AAED,wBAAsB,UAAU,qDAM/B;AAED,wBAAsB,qBAAqB,CAAC,OAAO,KAAA,oDAMlD;AAED,wBAAsB,KAAK,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA,EAAE,KAAK,KAAA,EAAE,MAAM,KAAA,oDAYzD","file":"LogApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateLogApi, generateLogKeysApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport storage from '../storage/SessionStorage';\n\nconst logsTailURLTemplate = '%s/monitoring/logs/tail?source=%s';\nconst logsFetchURLTemplate =\n '%s/monitoring/logs?source=%s&beginTime=%s&endTime=%s';\nconst logsSourcesURLTemplate = '%s/monitoring/logs/sources';\nconst logsCreateAPIKeyAndSecretURLTemplate = '%s/keys?_action=create';\nconst logsGetAPIKeysURLTemplate = '%s/keys';\n\nexport async function tail(source, cookie) {\n let urlString = util.format(\n logsTailURLTemplate,\n getTenantURL(storage.session.getTenant()),\n encodeURIComponent(source)\n );\n if (cookie) {\n urlString += `&_pagedResultsCookie=${encodeURIComponent(cookie)}`;\n }\n return generateLogApi().get(urlString);\n}\n\nexport async function getAPIKeys() {\n const urlString = util.format(\n logsGetAPIKeysURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogKeysApi().get(urlString);\n}\n\nexport async function getSources() {\n const urlString = util.format(\n logsSourcesURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogApi().get(urlString);\n}\n\nexport async function createAPIKeyAndSecret(keyName) {\n const urlString = util.format(\n logsCreateAPIKeyAndSecretURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateLogKeysApi().post(urlString, { name: keyName });\n}\n\nexport async function fetch(source, startTs, endTs, cookie) {\n let urlString = util.format(\n logsFetchURLTemplate,\n getTenantURL(storage.session.getTenant()),\n encodeURIComponent(source),\n startTs,\n endTs\n );\n if (cookie) {\n urlString += `&_pagedResultsCookie=${encodeURIComponent(cookie)}`;\n }\n return generateLogApi({ timeout: 60000 }).get(urlString);\n}\n"]}
@@ -4,3 +4,4 @@ export declare function resolvePayloadLevel(log: any): any;
4
4
  export declare function getLogSources(): Promise<any[]>;
5
5
  export declare function tailLogs(source: any, levels: any, txid: any, cookie: any, nf: any): Promise<string>;
6
6
  export declare function provisionCreds(): Promise<any>;
7
+ export declare function fetchLogs(source: any, startTs: any, endTs: any, levels: any, txid: any, ffString: any, cookie: any, nf: any): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ops/LogOps.ts"],"names":[],"mappings":"AAwOA,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,iBA2CnC","file":"LogOps.d.ts","sourcesContent":["import { printMessage } from './utils/Console';\nimport { getCurrentTimestamp } from './utils/ExportImportUtils';\nimport { createAPIKeyAndSecret, getAPIKeys, getSources } from '../api/LogApi';\n\nimport storage from '../storage/SessionStorage';\n\nimport * as LogApi from '../api/LogApi';\n\n// eslint-disable-next-line 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 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 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-${storage.session.getUsername()}`;\n return getAPIKeys()\n .then((response) => {\n response.data.result.forEach((k) => {\n if (k.name === keyName) {\n // append current timestamp to name if the named key already exists\n keyName = `${keyName}-${getCurrentTimestamp()}`;\n }\n });\n return createAPIKeyAndSecret(keyName)\n .then((resp) => {\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 printMessage(\n `Created a new log API key [${keyName}] in ${storage.session.getTenant()}`\n );\n return resp.data;\n })\n .catch((error) => {\n printMessage(\n `create keys ERROR: create keys call returned ${error}`,\n 'error'\n );\n return null;\n });\n })\n .catch((error) => {\n printMessage(\n `get keys ERROR: get keys call returned ${error}`,\n 'error'\n );\n });\n } catch (e) {\n printMessage(`create keys ERROR: create keys data error - ${e}`, 'error');\n return null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/ops/LogOps.ts"],"names":[],"mappings":"AAwOA,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,iBA2CnC;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 } from './utils/Console';\nimport { getCurrentTimestamp } from './utils/ExportImportUtils';\nimport { createAPIKeyAndSecret, getAPIKeys, getSources } from '../api/LogApi';\n\nimport storage from '../storage/SessionStorage';\n\nimport * as LogApi from '../api/LogApi';\n\n// eslint-disable-next-line 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 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 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-${storage.session.getUsername()}`;\n return getAPIKeys()\n .then((response) => {\n response.data.result.forEach((k) => {\n if (k.name === keyName) {\n // append current timestamp to name if the named key already exists\n keyName = `${keyName}-${getCurrentTimestamp()}`;\n }\n });\n return createAPIKeyAndSecret(keyName)\n .then((resp) => {\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 printMessage(\n `Created a new log API key [${keyName}] in ${storage.session.getTenant()}`\n );\n return resp.data;\n })\n .catch((error) => {\n printMessage(\n `create keys ERROR: create keys call returned ${error}`,\n 'error'\n );\n return null;\n });\n })\n .catch((error) => {\n printMessage(\n `get keys ERROR: get keys call returned ${error}`,\n 'error'\n );\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"]}