@rockcarver/frodo-lib 0.17.5 → 0.17.6

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,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.17.6] - 2023-01-09
11
+
10
12
  ## [0.17.5] - 2023-01-07
11
13
 
12
14
  ## [0.17.5-0] - 2023-01-07
@@ -907,7 +909,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
907
909
  - Fixed problem with adding connection profiles
908
910
  - Miscellaneous bug fixes
909
911
 
910
- [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.17.5...HEAD
912
+ [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.17.6...HEAD
913
+
914
+ [0.17.6]: https://github.com/rockcarver/frodo-lib/compare/v0.17.5...v0.17.6
911
915
 
912
916
  [0.17.5]: https://github.com/rockcarver/frodo-lib/compare/v0.17.5-0...v0.17.5
913
917
 
@@ -35,6 +35,15 @@ function fillCallbacks(response, map) {
35
35
  }
36
36
  return body;
37
37
  }
38
+
39
+ /**
40
+ *
41
+ * @param {any} body POST request body
42
+ * @param {any} config request config
43
+ * @param {string} realm realm
44
+ * @param {string} service name of authentication service/journey
45
+ * @returns Promise resolving to the authentication service response
46
+ */
38
47
  function step() {
39
48
  return _step.apply(this, arguments);
40
49
  }
@@ -43,7 +52,8 @@ function _step() {
43
52
  var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
44
53
  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
45
54
  var realm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '/';
46
- var urlString = state.getAuthenticationService() ? _util.default.format(authenticateWithServiceUrlTemplate, state.getHost(), (0, _ApiUtils.getRealmPath)(realm), state.getAuthenticationService()) : _util.default.format(authenticateUrlTemplate, state.getHost(), (0, _ApiUtils.getRealmPath)(realm));
55
+ var service = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
56
+ var urlString = service || state.getAuthenticationService() ? _util.default.format(authenticateWithServiceUrlTemplate, state.getHost(), (0, _ApiUtils.getRealmPath)(realm), service || state.getAuthenticationService()) : _util.default.format(authenticateUrlTemplate, state.getHost(), (0, _ApiUtils.getRealmPath)(realm));
47
57
  var {
48
58
  data
49
59
  } = yield (0, _BaseApi.generateAmApi)(getApiConfig()).post(urlString, body, config);
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticateApi.js","names":["authenticateUrlTemplate","authenticateWithServiceUrlTemplate","apiVersion","getApiConfig","fillCallbacks","response","map","body","JSON","parse","stringify","callback","callbacks","input","value","name","step","config","realm","urlString","state","getAuthenticationService","util","format","getHost","getRealmPath","data","generateAmApi","post"],"sources":["api/AuthenticateApi.ts"],"sourcesContent":["import util from 'util';\nimport { generateAmApi } from './BaseApi';\nimport * as state from '../shared/State';\nimport { getRealmPath } from './utils/ApiUtils';\n\nconst authenticateUrlTemplate = '%s/json%s/authenticate';\nconst authenticateWithServiceUrlTemplate = `${authenticateUrlTemplate}?authIndexType=service&authIndexValue=%s`;\n\nconst apiVersion = 'resource=2.0, protocol=1.0';\nconst getApiConfig = () => ({\n apiVersion,\n});\n\n/**\n * Fill callbacks from a map\n * Just a start\n * @param {object} response json response from a call to /authenticate\n * @param {{ [k: string]: string | number | boolean | string[] }} map name/value map\n * @returns filled response body so it can be used as input to another call to /authenticate\n */\nexport function fillCallbacks(\n response: object,\n map: { [k: string]: string | number | boolean | string[] }\n): object {\n const body = JSON.parse(JSON.stringify(response));\n for (const callback of body.callbacks) {\n callback.input[0].value = map[callback.input[0].name];\n }\n return body;\n}\n\nexport async function step(body = {}, config = {}, realm = '/') {\n const urlString = state.getAuthenticationService()\n ? util.format(\n authenticateWithServiceUrlTemplate,\n state.getHost(),\n getRealmPath(realm),\n state.getAuthenticationService()\n )\n : util.format(\n authenticateUrlTemplate,\n state.getHost(),\n getRealmPath(realm)\n );\n const { data } = await generateAmApi(getApiConfig()).post(\n urlString,\n body,\n config\n );\n return data;\n}\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAAgD;AAAA;AAAA;AAAA;AAAA;AAEhD,IAAMA,uBAAuB,GAAG,wBAAwB;AACxD,IAAMC,kCAAkC,aAAMD,uBAAuB,6CAA0C;AAE/G,IAAME,UAAU,GAAG,4BAA4B;AAC/C,IAAMC,YAAY,GAAG,OAAO;EAC1BD;AACF,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,aAAa,CAC3BC,QAAgB,EAChBC,GAA0D,EAClD;EACR,IAAMC,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACL,QAAQ,CAAC,CAAC;EACjD,KAAK,IAAMM,QAAQ,IAAIJ,IAAI,CAACK,SAAS,EAAE;IACrCD,QAAQ,CAACE,KAAK,CAAC,CAAC,CAAC,CAACC,KAAK,GAAGR,GAAG,CAACK,QAAQ,CAACE,KAAK,CAAC,CAAC,CAAC,CAACE,IAAI,CAAC;EACvD;EACA,OAAOR,IAAI;AACb;AAAC,SAEqBS,IAAI;EAAA;AAAA;AAAA;EAAA,0BAAnB,aAAyD;IAAA,IAArCT,IAAI,uEAAG,CAAC,CAAC;IAAA,IAAEU,MAAM,uEAAG,CAAC,CAAC;IAAA,IAAEC,KAAK,uEAAG,GAAG;IAC5D,IAAMC,SAAS,GAAGC,KAAK,CAACC,wBAAwB,EAAE,GAC9CC,aAAI,CAACC,MAAM,CACTtB,kCAAkC,EAClCmB,KAAK,CAACI,OAAO,EAAE,EACf,IAAAC,sBAAY,EAACP,KAAK,CAAC,EACnBE,KAAK,CAACC,wBAAwB,EAAE,CACjC,GACDC,aAAI,CAACC,MAAM,CACTvB,uBAAuB,EACvBoB,KAAK,CAACI,OAAO,EAAE,EACf,IAAAC,sBAAY,EAACP,KAAK,CAAC,CACpB;IACL,IAAM;MAAEQ;IAAK,CAAC,SAAS,IAAAC,sBAAa,EAACxB,YAAY,EAAE,CAAC,CAACyB,IAAI,CACvDT,SAAS,EACTZ,IAAI,EACJU,MAAM,CACP;IACD,OAAOS,IAAI;EACb,CAAC;EAAA;AAAA"}
1
+ {"version":3,"file":"AuthenticateApi.js","names":["authenticateUrlTemplate","authenticateWithServiceUrlTemplate","apiVersion","getApiConfig","fillCallbacks","response","map","body","JSON","parse","stringify","callback","callbacks","input","value","name","step","config","realm","service","undefined","urlString","state","getAuthenticationService","util","format","getHost","getRealmPath","data","generateAmApi","post"],"sources":["api/AuthenticateApi.ts"],"sourcesContent":["import util from 'util';\nimport { generateAmApi } from './BaseApi';\nimport * as state from '../shared/State';\nimport { getRealmPath } from './utils/ApiUtils';\n\nconst authenticateUrlTemplate = '%s/json%s/authenticate';\nconst authenticateWithServiceUrlTemplate = `${authenticateUrlTemplate}?authIndexType=service&authIndexValue=%s`;\n\nconst apiVersion = 'resource=2.0, protocol=1.0';\nconst getApiConfig = () => ({\n apiVersion,\n});\n\n/**\n * Fill callbacks from a map\n * Just a start\n * @param {object} response json response from a call to /authenticate\n * @param {{ [k: string]: string | number | boolean | string[] }} map name/value map\n * @returns filled response body so it can be used as input to another call to /authenticate\n */\nexport function fillCallbacks(\n response: object,\n map: { [k: string]: string | number | boolean | string[] }\n): object {\n const body = JSON.parse(JSON.stringify(response));\n for (const callback of body.callbacks) {\n callback.input[0].value = map[callback.input[0].name];\n }\n return body;\n}\n\n/**\n *\n * @param {any} body POST request body\n * @param {any} config request config\n * @param {string} realm realm\n * @param {string} service name of authentication service/journey\n * @returns Promise resolving to the authentication service response\n */\nexport async function step(\n body = {},\n config = {},\n realm = '/',\n service: string = undefined\n) {\n const urlString =\n service || state.getAuthenticationService()\n ? util.format(\n authenticateWithServiceUrlTemplate,\n state.getHost(),\n getRealmPath(realm),\n service || state.getAuthenticationService()\n )\n : util.format(\n authenticateUrlTemplate,\n state.getHost(),\n getRealmPath(realm)\n );\n const { data } = await generateAmApi(getApiConfig()).post(\n urlString,\n body,\n config\n );\n return data;\n}\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAAgD;AAAA;AAAA;AAAA;AAAA;AAEhD,IAAMA,uBAAuB,GAAG,wBAAwB;AACxD,IAAMC,kCAAkC,aAAMD,uBAAuB,6CAA0C;AAE/G,IAAME,UAAU,GAAG,4BAA4B;AAC/C,IAAMC,YAAY,GAAG,OAAO;EAC1BD;AACF,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,aAAa,CAC3BC,QAAgB,EAChBC,GAA0D,EAClD;EACR,IAAMC,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACL,QAAQ,CAAC,CAAC;EACjD,KAAK,IAAMM,QAAQ,IAAIJ,IAAI,CAACK,SAAS,EAAE;IACrCD,QAAQ,CAACE,KAAK,CAAC,CAAC,CAAC,CAACC,KAAK,GAAGR,GAAG,CAACK,QAAQ,CAACE,KAAK,CAAC,CAAC,CAAC,CAACE,IAAI,CAAC;EACvD;EACA,OAAOR,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,SAQsBS,IAAI;EAAA;AAAA;AAAA;EAAA,0BAAnB,aAKL;IAAA,IAJAT,IAAI,uEAAG,CAAC,CAAC;IAAA,IACTU,MAAM,uEAAG,CAAC,CAAC;IAAA,IACXC,KAAK,uEAAG,GAAG;IAAA,IACXC,OAAe,uEAAGC,SAAS;IAE3B,IAAMC,SAAS,GACbF,OAAO,IAAIG,KAAK,CAACC,wBAAwB,EAAE,GACvCC,aAAI,CAACC,MAAM,CACTxB,kCAAkC,EAClCqB,KAAK,CAACI,OAAO,EAAE,EACf,IAAAC,sBAAY,EAACT,KAAK,CAAC,EACnBC,OAAO,IAAIG,KAAK,CAACC,wBAAwB,EAAE,CAC5C,GACDC,aAAI,CAACC,MAAM,CACTzB,uBAAuB,EACvBsB,KAAK,CAACI,OAAO,EAAE,EACf,IAAAC,sBAAY,EAACT,KAAK,CAAC,CACpB;IACP,IAAM;MAAEU;IAAK,CAAC,SAAS,IAAAC,sBAAa,EAAC1B,YAAY,EAAE,CAAC,CAAC2B,IAAI,CACvDT,SAAS,EACTd,IAAI,EACJU,MAAM,CACP;IACD,OAAOW,IAAI;EACb,CAAC;EAAA;AAAA"}
@@ -126,11 +126,13 @@ function _deleteConfigEntity() {
126
126
  });
127
127
  return _deleteConfigEntity.apply(this, arguments);
128
128
  }
129
- function queryAllManagedObjectsByType(_x6, _x7, _x8) {
129
+ function queryAllManagedObjectsByType(_x6) {
130
130
  return _queryAllManagedObjectsByType.apply(this, arguments);
131
131
  }
132
132
  function _queryAllManagedObjectsByType() {
133
- _queryAllManagedObjectsByType = _asyncToGenerator(function* (type, fields, pageCookie) {
133
+ _queryAllManagedObjectsByType = _asyncToGenerator(function* (type) {
134
+ var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
135
+ var pageCookie = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
134
136
  var fieldsParam = fields.length > 0 ? "&_fields=".concat(fields.join(',')) : '&_fields=_id';
135
137
  var urlTemplate = pageCookie ? "".concat(idmManagedObjectURLTemplate).concat(fieldsParam, "&_pagedResultsCookie=").concat(encodeURIComponent(pageCookie)) : "".concat(idmManagedObjectURLTemplate).concat(fieldsParam);
136
138
  var urlString = _util.default.format(urlTemplate, (0, _ApiUtils.getTenantURL)(state.getHost()), type);
@@ -1 +1 @@
1
- {"version":3,"file":"IdmConfigApi.js","names":["idmAllConfigURLTemplate","idmConfigURLTemplate","idmConfigEntityQueryTemplate","idmManagedObjectURLTemplate","getAllConfigEntities","urlString","util","format","getTenantURL","state","getHost","data","generateIdmApi","get","getConfigEntitiesByType","type","encodeURIComponent","getConfigEntity","entityId","putConfigEntity","entityData","put","error","Error","deleteConfigEntity","delete","withCredentials","queryAllManagedObjectsByType","fields","pageCookie","fieldsParam","length","join","urlTemplate"],"sources":["api/IdmConfigApi.ts"],"sourcesContent":["import util from 'util';\nimport { generateIdmApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport * as state from '../shared/State';\n\nconst idmAllConfigURLTemplate = '%s/openidm/config';\nconst idmConfigURLTemplate = '%s/openidm/config/%s';\nconst idmConfigEntityQueryTemplate = '%s/openidm/config?_queryFilter=%s';\nconst idmManagedObjectURLTemplate =\n '%s/openidm/managed/%s?_queryFilter=true&_pageSize=10000';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n const urlString = util.format(\n idmAllConfigURLTemplate,\n getTenantURL(state.getHost())\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Get IDM config entities by type\n * @param {string} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n const urlString = util.format(\n idmConfigEntityQueryTemplate,\n getTenantURL(state.getHost()),\n encodeURIComponent(`_id sw '${type}'`)\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n try {\n const { data } = await generateIdmApi().put(urlString, entityData);\n return data;\n } catch (error) {\n throw Error(`Could not put config entity ${entityId}: ${error}`);\n }\n}\n\n/**\n * Delete IDM config entity\n * @param {string} entityId config entity id\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function deleteConfigEntity(entityId: string) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n const { data } = await generateIdmApi().delete(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Query managed objects\n * @param {string} type managed object type\n * @param {string[]} fields fields to retrieve\n * @param {string} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type: string,\n fields: string[],\n pageCookie: string\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n const fieldsParam =\n fields.length > 0 ? `&_fields=${fields.join(',')}` : '&_fields=_id';\n const urlTemplate = pageCookie\n ? `${idmManagedObjectURLTemplate}${fieldsParam}&_pagedResultsCookie=${encodeURIComponent(\n pageCookie\n )}`\n : `${idmManagedObjectURLTemplate}${fieldsParam}`;\n const urlString = util.format(\n urlTemplate,\n getTenantURL(state.getHost()),\n type\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"IdmConfigApi.js","names":["idmAllConfigURLTemplate","idmConfigURLTemplate","idmConfigEntityQueryTemplate","idmManagedObjectURLTemplate","getAllConfigEntities","urlString","util","format","getTenantURL","state","getHost","data","generateIdmApi","get","getConfigEntitiesByType","type","encodeURIComponent","getConfigEntity","entityId","putConfigEntity","entityData","put","error","Error","deleteConfigEntity","delete","withCredentials","queryAllManagedObjectsByType","fields","pageCookie","undefined","fieldsParam","length","join","urlTemplate"],"sources":["api/IdmConfigApi.ts"],"sourcesContent":["import util from 'util';\nimport { generateIdmApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport * as state from '../shared/State';\n\nconst idmAllConfigURLTemplate = '%s/openidm/config';\nconst idmConfigURLTemplate = '%s/openidm/config/%s';\nconst idmConfigEntityQueryTemplate = '%s/openidm/config?_queryFilter=%s';\nconst idmManagedObjectURLTemplate =\n '%s/openidm/managed/%s?_queryFilter=true&_pageSize=10000';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n const urlString = util.format(\n idmAllConfigURLTemplate,\n getTenantURL(state.getHost())\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Get IDM config entities by type\n * @param {string} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n const urlString = util.format(\n idmConfigEntityQueryTemplate,\n getTenantURL(state.getHost()),\n encodeURIComponent(`_id sw '${type}'`)\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n try {\n const { data } = await generateIdmApi().put(urlString, entityData);\n return data;\n } catch (error) {\n throw Error(`Could not put config entity ${entityId}: ${error}`);\n }\n}\n\n/**\n * Delete IDM config entity\n * @param {string} entityId config entity id\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function deleteConfigEntity(entityId: string) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n const { data } = await generateIdmApi().delete(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Query managed objects\n * @param {string} type managed object type\n * @param {string[]} fields fields to retrieve\n * @param {string} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type: string,\n fields: string[] = [],\n pageCookie: string = undefined\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n const fieldsParam =\n fields.length > 0 ? `&_fields=${fields.join(',')}` : '&_fields=_id';\n const urlTemplate = pageCookie\n ? `${idmManagedObjectURLTemplate}${fieldsParam}&_pagedResultsCookie=${encodeURIComponent(\n pageCookie\n )}`\n : `${idmManagedObjectURLTemplate}${fieldsParam}`;\n const urlString = util.format(\n urlTemplate,\n getTenantURL(state.getHost()),\n type\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AAAyC;AAAA;AAAA;AAAA;AAAA;AAEzC,IAAMA,uBAAuB,GAAG,mBAAmB;AACnD,IAAMC,oBAAoB,GAAG,sBAAsB;AACnD,IAAMC,4BAA4B,GAAG,mCAAmC;AACxE,IAAMC,2BAA2B,GAC/B,yDAAyD;;AAE3D;AACA;AACA;AACA;AAHA,SAIsBC,oBAAoB;EAAA;AAAA;AAS1C;AACA;AACA;AACA;AACA;AAJA;EAAA,0CATO,aAAsC;IAC3C,IAAMC,SAAS,GAAGC,aAAI,CAACC,MAAM,CAC3BP,uBAAuB,EACvB,IAAAQ,sBAAY,EAACC,KAAK,CAACC,OAAO,EAAE,CAAC,CAC9B;IACD,IAAM;MAAEC;IAAK,CAAC,SAAS,IAAAC,uBAAc,GAAE,CAACC,GAAG,CAACR,SAAS,CAAC;IACtD,OAAOM,IAAI;EACb,CAAC;EAAA;AAAA;AAAA,SAOqBG,uBAAuB;EAAA;AAAA;AAU7C;AACA;AACA;AACA;AACA;AAJA;EAAA,6CAVO,WAAuCC,IAAI,EAAE;IAClD,IAAMV,SAAS,GAAGC,aAAI,CAACC,MAAM,CAC3BL,4BAA4B,EAC5B,IAAAM,sBAAY,EAACC,KAAK,CAACC,OAAO,EAAE,CAAC,EAC7BM,kBAAkB,mBAAYD,IAAI,OAAI,CACvC;IACD,IAAM;MAAEJ;IAAK,CAAC,SAAS,IAAAC,uBAAc,GAAE,CAACC,GAAG,CAACR,SAAS,CAAC;IACtD,OAAOM,IAAI;EACb,CAAC;EAAA;AAAA;AAAA,SAOqBM,eAAe;EAAA;AAAA;AAUrC;AACA;AACA;AACA;AACA;AACA;AALA;EAAA,qCAVO,WAA+BC,QAAQ,EAAE;IAC9C,IAAMb,SAAS,GAAGC,aAAI,CAACC,MAAM,CAC3BN,oBAAoB,EACpB,IAAAO,sBAAY,EAACC,KAAK,CAACC,OAAO,EAAE,CAAC,EAC7BQ,QAAQ,CACT;IACD,IAAM;MAAEP;IAAK,CAAC,SAAS,IAAAC,uBAAc,GAAE,CAACC,GAAG,CAACR,SAAS,CAAC;IACtD,OAAOM,IAAI;EACb,CAAC;EAAA;AAAA;AAAA,SAQqBQ,eAAe;EAAA;AAAA;AAiBrC;AACA;AACA;AACA;AACA;AAJA;EAAA,qCAjBO,WACLD,QAAgB,EAChBE,UAA2B,EAC3B;IACA,IAAMf,SAAS,GAAGC,aAAI,CAACC,MAAM,CAC3BN,oBAAoB,EACpB,IAAAO,sBAAY,EAACC,KAAK,CAACC,OAAO,EAAE,CAAC,EAC7BQ,QAAQ,CACT;IACD,IAAI;MACF,IAAM;QAAEP;MAAK,CAAC,SAAS,IAAAC,uBAAc,GAAE,CAACS,GAAG,CAAChB,SAAS,EAAEe,UAAU,CAAC;MAClE,OAAOT,IAAI;IACb,CAAC,CAAC,OAAOW,KAAK,EAAE;MACd,MAAMC,KAAK,uCAAgCL,QAAQ,eAAKI,KAAK,EAAG;IAClE;EACF,CAAC;EAAA;AAAA;AAAA,SAOqBE,kBAAkB;EAAA;AAAA;AAYxC;AACA;AACA;AACA;AACA;AACA;AACA;AANA;EAAA,wCAZO,WAAkCN,QAAgB,EAAE;IACzD,IAAMb,SAAS,GAAGC,aAAI,CAACC,MAAM,CAC3BN,oBAAoB,EACpB,IAAAO,sBAAY,EAACC,KAAK,CAACC,OAAO,EAAE,CAAC,EAC7BQ,QAAQ,CACT;IACD,IAAM;MAAEP;IAAK,CAAC,SAAS,IAAAC,uBAAc,GAAE,CAACa,MAAM,CAACpB,SAAS,EAAE;MACxDqB,eAAe,EAAE;IACnB,CAAC,CAAC;IACF,OAAOf,IAAI;EACb,CAAC;EAAA;AAAA;AAAA,SASqBgB,4BAA4B;EAAA;AAAA;AAAA;EAAA,kDAA3C,WACLZ,IAAY,EAUX;IAAA,IATDa,MAAgB,uEAAG,EAAE;IAAA,IACrBC,UAAkB,uEAAGC,SAAS;IAS9B,IAAMC,WAAW,GACfH,MAAM,CAACI,MAAM,GAAG,CAAC,sBAAeJ,MAAM,CAACK,IAAI,CAAC,GAAG,CAAC,IAAK,cAAc;IACrE,IAAMC,WAAW,GAAGL,UAAU,aACvB1B,2BAA2B,SAAG4B,WAAW,kCAAwBf,kBAAkB,CACpFa,UAAU,CACX,cACE1B,2BAA2B,SAAG4B,WAAW,CAAE;IAClD,IAAM1B,SAAS,GAAGC,aAAI,CAACC,MAAM,CAC3B2B,WAAW,EACX,IAAA1B,sBAAY,EAACC,KAAK,CAACC,OAAO,EAAE,CAAC,EAC7BK,IAAI,CACL;IACD,IAAM;MAAEJ;IAAK,CAAC,SAAS,IAAAC,uBAAc,GAAE,CAACC,GAAG,CAACR,SAAS,CAAC;IACtD,OAAOM,IAAI;EACb,CAAC;EAAA;AAAA"}
package/cjs/ops/IdmOps.js CHANGED
@@ -65,9 +65,9 @@ function putConfigEntity(_x3, _x4) {
65
65
  }
66
66
  /**
67
67
  * Query managed objects
68
- * @param {String} type managed object type
69
- * @param {[String]} fields fields to retrieve
70
- * @param {String} pageCookie paged results cookie
68
+ * @param {string} type managed object type
69
+ * @param {string[]} fields fields to retrieve
70
+ * @param {string} pageCookie paged results cookie
71
71
  * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type
72
72
  */
73
73
  function _putConfigEntity2() {
@@ -76,7 +76,7 @@ function _putConfigEntity2() {
76
76
  });
77
77
  return _putConfigEntity2.apply(this, arguments);
78
78
  }
79
- function queryAllManagedObjectsByType(_x5, _x6, _x7) {
79
+ function queryAllManagedObjectsByType(_x5) {
80
80
  return _queryAllManagedObjectsByType2.apply(this, arguments);
81
81
  }
82
82
  /**
@@ -84,7 +84,9 @@ function queryAllManagedObjectsByType(_x5, _x6, _x7) {
84
84
  * @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects
85
85
  */
86
86
  function _queryAllManagedObjectsByType2() {
87
- _queryAllManagedObjectsByType2 = _asyncToGenerator(function* (type, fields, pageCookie) {
87
+ _queryAllManagedObjectsByType2 = _asyncToGenerator(function* (type) {
88
+ var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
89
+ var pageCookie = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
88
90
  return (0, _IdmConfigApi.queryAllManagedObjectsByType)(type, fields, pageCookie);
89
91
  });
90
92
  return _queryAllManagedObjectsByType2.apply(this, arguments);
@@ -1 +1 @@
1
- {"version":3,"file":"IdmOps.js","names":["getAllConfigEntities","_getAllConfigEntities","getConfigEntitiesByType","type","_getConfigEntitiesByType","getConfigEntity","entityId","_getConfigEntity","putConfigEntity","entityData","_putConfigEntity","queryAllManagedObjectsByType","fields","pageCookie","_queryAllManagedObjectsByType","testConnectorServers","response","_testConnectorServers","openicf"],"sources":["ops/IdmOps.ts"],"sourcesContent":["import {\n getAllConfigEntities as _getAllConfigEntities,\n getConfigEntity as _getConfigEntity,\n putConfigEntity as _putConfigEntity,\n getConfigEntitiesByType as _getConfigEntitiesByType,\n queryAllManagedObjectsByType as _queryAllManagedObjectsByType,\n} from '../api/IdmConfigApi';\nimport {\n testConnectorServers as _testConnectorServers,\n ConnectorServerStatusInterface,\n} from '../api/IdmSystemApi';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n return _getAllConfigEntities();\n}\n\n/**\n * Get IDM config entities by type\n * @param {String} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n return _getConfigEntitiesByType(type);\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n return _getConfigEntity(entityId);\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n return _putConfigEntity(entityId, entityData);\n}\n\n/**\n * Query managed objects\n * @param {String} type managed object type\n * @param {[String]} fields fields to retrieve\n * @param {String} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type,\n fields,\n pageCookie\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n return _queryAllManagedObjectsByType(type, fields, pageCookie);\n}\n\n/**\n * Test connector servers\n * @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects\n */\nexport async function testConnectorServers(): Promise<\n ConnectorServerStatusInterface[]\n> {\n const response = await _testConnectorServers();\n return response.openicf;\n}\n"],"mappings":";;;;;;;;;;;AAAA;AAOA;AAG6B;AAAA;AAE7B;AACA;AACA;AACA;AAHA,SAIsBA,oBAAoB;EAAA;AAAA;AAI1C;AACA;AACA;AACA;AACA;AAJA;EAAA,2CAJO,aAAsC;IAC3C,OAAO,IAAAC,kCAAqB,GAAE;EAChC,CAAC;EAAA;AAAA;AAAA,SAOqBC,uBAAuB;EAAA;AAAA;AAI7C;AACA;AACA;AACA;AACA;AAJA;EAAA,8CAJO,WAAuCC,IAAI,EAAE;IAClD,OAAO,IAAAC,qCAAwB,EAACD,IAAI,CAAC;EACvC,CAAC;EAAA;AAAA;AAAA,SAOqBE,eAAe;EAAA;AAAA;AAIrC;AACA;AACA;AACA;AACA;AACA;AALA;EAAA,sCAJO,WAA+BC,QAAQ,EAAE;IAC9C,OAAO,IAAAC,6BAAgB,EAACD,QAAQ,CAAC;EACnC,CAAC;EAAA;AAAA;AAAA,SAQqBE,eAAe;EAAA;AAAA;AAOrC;AACA;AACA;AACA;AACA;AACA;AACA;AANA;EAAA,sCAPO,WACLF,QAAgB,EAChBG,UAA2B,EAC3B;IACA,OAAO,IAAAC,6BAAgB,EAACJ,QAAQ,EAAEG,UAAU,CAAC;EAC/C,CAAC;EAAA;AAAA;AAAA,SASqBE,4BAA4B;EAAA;AAAA;AAelD;AACA;AACA;AACA;AAHA;EAAA,mDAfO,WACLR,IAAI,EACJS,MAAM,EACNC,UAAU,EAQT;IACD,OAAO,IAAAC,0CAA6B,EAACX,IAAI,EAAES,MAAM,EAAEC,UAAU,CAAC;EAChE,CAAC;EAAA;AAAA;AAAA,SAMqBE,oBAAoB;EAAA;AAAA;AAAA;EAAA,2CAAnC,aAEL;IACA,IAAMC,QAAQ,SAAS,IAAAC,kCAAqB,GAAE;IAC9C,OAAOD,QAAQ,CAACE,OAAO;EACzB,CAAC;EAAA;AAAA"}
1
+ {"version":3,"file":"IdmOps.js","names":["getAllConfigEntities","_getAllConfigEntities","getConfigEntitiesByType","type","_getConfigEntitiesByType","getConfigEntity","entityId","_getConfigEntity","putConfigEntity","entityData","_putConfigEntity","queryAllManagedObjectsByType","fields","pageCookie","undefined","_queryAllManagedObjectsByType","testConnectorServers","response","_testConnectorServers","openicf"],"sources":["ops/IdmOps.ts"],"sourcesContent":["import {\n getAllConfigEntities as _getAllConfigEntities,\n getConfigEntity as _getConfigEntity,\n putConfigEntity as _putConfigEntity,\n getConfigEntitiesByType as _getConfigEntitiesByType,\n queryAllManagedObjectsByType as _queryAllManagedObjectsByType,\n} from '../api/IdmConfigApi';\nimport {\n testConnectorServers as _testConnectorServers,\n ConnectorServerStatusInterface,\n} from '../api/IdmSystemApi';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n return _getAllConfigEntities();\n}\n\n/**\n * Get IDM config entities by type\n * @param {String} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n return _getConfigEntitiesByType(type);\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n return _getConfigEntity(entityId);\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n return _putConfigEntity(entityId, entityData);\n}\n\n/**\n * Query managed objects\n * @param {string} type managed object type\n * @param {string[]} fields fields to retrieve\n * @param {string} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type: string,\n fields: string[] = [],\n pageCookie: string = undefined\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n return _queryAllManagedObjectsByType(type, fields, pageCookie);\n}\n\n/**\n * Test connector servers\n * @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects\n */\nexport async function testConnectorServers(): Promise<\n ConnectorServerStatusInterface[]\n> {\n const response = await _testConnectorServers();\n return response.openicf;\n}\n"],"mappings":";;;;;;;;;;;AAAA;AAOA;AAG6B;AAAA;AAE7B;AACA;AACA;AACA;AAHA,SAIsBA,oBAAoB;EAAA;AAAA;AAI1C;AACA;AACA;AACA;AACA;AAJA;EAAA,2CAJO,aAAsC;IAC3C,OAAO,IAAAC,kCAAqB,GAAE;EAChC,CAAC;EAAA;AAAA;AAAA,SAOqBC,uBAAuB;EAAA;AAAA;AAI7C;AACA;AACA;AACA;AACA;AAJA;EAAA,8CAJO,WAAuCC,IAAI,EAAE;IAClD,OAAO,IAAAC,qCAAwB,EAACD,IAAI,CAAC;EACvC,CAAC;EAAA;AAAA;AAAA,SAOqBE,eAAe;EAAA;AAAA;AAIrC;AACA;AACA;AACA;AACA;AACA;AALA;EAAA,sCAJO,WAA+BC,QAAQ,EAAE;IAC9C,OAAO,IAAAC,6BAAgB,EAACD,QAAQ,CAAC;EACnC,CAAC;EAAA;AAAA;AAAA,SAQqBE,eAAe;EAAA;AAAA;AAOrC;AACA;AACA;AACA;AACA;AACA;AACA;AANA;EAAA,sCAPO,WACLF,QAAgB,EAChBG,UAA2B,EAC3B;IACA,OAAO,IAAAC,6BAAgB,EAACJ,QAAQ,EAAEG,UAAU,CAAC;EAC/C,CAAC;EAAA;AAAA;AAAA,SASqBE,4BAA4B;EAAA;AAAA;AAelD;AACA;AACA;AACA;AAHA;EAAA,mDAfO,WACLR,IAAY,EAUX;IAAA,IATDS,MAAgB,uEAAG,EAAE;IAAA,IACrBC,UAAkB,uEAAGC,SAAS;IAS9B,OAAO,IAAAC,0CAA6B,EAACZ,IAAI,EAAES,MAAM,EAAEC,UAAU,CAAC;EAChE,CAAC;EAAA;AAAA;AAAA,SAMqBG,oBAAoB;EAAA;AAAA;AAAA;EAAA,2CAAnC,aAEL;IACA,IAAMC,QAAQ,SAAS,IAAAC,kCAAqB,GAAE;IAC9C,OAAOD,QAAQ,CAACE,OAAO;EACzB,CAAC;EAAA;AAAA"}
@@ -7,11 +7,19 @@ exports.createServiceAccount = createServiceAccount;
7
7
  exports.isServiceAccountsFeatureAvailable = isServiceAccountsFeatureAvailable;
8
8
  var _ManagedObjectApi = require("../api/ManagedObjectApi");
9
9
  var _Console = require("./utils/Console");
10
- var _IdmOps = require("./IdmOps");
10
+ var _AuthenticateApi = require("../api/AuthenticateApi");
11
11
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
12
12
  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); }); }; }
13
13
  var moType = 'svcacct';
14
+ /**
15
+ * Global flag indicating if service accounts are available
16
+ */
14
17
  var serviceAccountsFeatureAvailable = undefined;
18
+
19
+ /**
20
+ * Check if service accounts are available
21
+ * @returns {Promise<boolean>} true if service accounts are available, false otherwise
22
+ */
15
23
  function isServiceAccountsFeatureAvailable() {
16
24
  return _isServiceAccountsFeatureAvailable.apply(this, arguments);
17
25
  }
@@ -27,12 +35,17 @@ function isServiceAccountsFeatureAvailable() {
27
35
  function _isServiceAccountsFeatureAvailable() {
28
36
  _isServiceAccountsFeatureAvailable = _asyncToGenerator(function* () {
29
37
  (0, _Console.debugMessage)("ServiceAccountOps.isServiceAccountsFeatureAvailable: start");
30
- // only look up the schema once
38
+ // only perform check once
31
39
  if (typeof serviceAccountsFeatureAvailable !== 'undefined') return serviceAccountsFeatureAvailable;
32
- serviceAccountsFeatureAvailable = false;
33
- var schema = yield (0, _IdmOps.getConfigEntity)('managed');
34
- for (var object of schema['objects']) {
35
- if (object['name'] === 'svcacct') serviceAccountsFeatureAvailable = true;
40
+ serviceAccountsFeatureAvailable = true;
41
+ try {
42
+ yield (0, _AuthenticateApi.step)({}, {}, '/', 'FRServiceAccountInternal');
43
+ } catch (error) {
44
+ var _error$response, _error$response2, _error$response3, _error$response3$data;
45
+ (0, _Console.debugMessage)((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data);
46
+ if (((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) === 400 && ((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : (_error$response3$data = _error$response3.data) === null || _error$response3$data === void 0 ? void 0 : _error$response3$data.message) === 'No Configuration found') {
47
+ serviceAccountsFeatureAvailable = false;
48
+ }
36
49
  }
37
50
  (0, _Console.debugMessage)("ServiceAccountOps.isServiceAccountsFeatureAvailable: end, available=".concat(serviceAccountsFeatureAvailable));
38
51
  return serviceAccountsFeatureAvailable;
@@ -44,6 +57,7 @@ function createServiceAccount(_x, _x2, _x3, _x4, _x5) {
44
57
  }
45
58
  function _createServiceAccount() {
46
59
  _createServiceAccount = _asyncToGenerator(function* (name, description, accountStatus, scopes, jwks) {
60
+ (0, _Console.debugMessage)("ServiceAccountOps.createServiceAccount: start");
47
61
  var payload = {
48
62
  name,
49
63
  description,
@@ -51,9 +65,10 @@ function _createServiceAccount() {
51
65
  scopes,
52
66
  jwks: JSON.stringify(jwks)
53
67
  };
54
- (0, _Console.debugMessage)("SvcacctOps: createSvcacct: payload:");
68
+ (0, _Console.debugMessage)("ServiceAccountOps: createServiceAccount: payload:");
55
69
  (0, _Console.debugMessage)(payload);
56
70
  var result = yield (0, _ManagedObjectApi.createManagedObject)(moType, payload);
71
+ (0, _Console.debugMessage)("ServiceAccountOps.createServiceAccount: end");
57
72
  return result;
58
73
  });
59
74
  return _createServiceAccount.apply(this, arguments);
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceAccountOps.js","names":["moType","serviceAccountsFeatureAvailable","undefined","isServiceAccountsFeatureAvailable","debugMessage","schema","getConfigEntity","object","createServiceAccount","name","description","accountStatus","scopes","jwks","payload","JSON","stringify","result","createManagedObject"],"sources":["ops/ServiceAccountOps.ts"],"sourcesContent":["import { createManagedObject } from '../api/ManagedObjectApi';\nimport { JwksInterface } from './JoseOps';\nimport { ObjectSkeletonInterface } from '../api/ApiTypes';\nimport { debugMessage } from './utils/Console';\nimport { getConfigEntity } from './IdmOps';\n\nconst moType = 'svcacct';\n\nexport interface SvcacctInterface {\n name: string;\n description: string;\n accountStatus: 'Active' | 'Inactive';\n scopes: string[];\n jwks: string;\n}\n\nlet serviceAccountsFeatureAvailable: boolean = undefined;\nexport async function isServiceAccountsFeatureAvailable(): Promise<boolean> {\n debugMessage(`ServiceAccountOps.isServiceAccountsFeatureAvailable: start`);\n // only look up the schema once\n if (typeof serviceAccountsFeatureAvailable !== 'undefined')\n return serviceAccountsFeatureAvailable;\n\n serviceAccountsFeatureAvailable = false;\n const schema = await getConfigEntity('managed');\n for (const object of schema['objects']) {\n if (object['name'] === 'svcacct') serviceAccountsFeatureAvailable = true;\n }\n debugMessage(\n `ServiceAccountOps.isServiceAccountsFeatureAvailable: end, available=${serviceAccountsFeatureAvailable}`\n );\n return serviceAccountsFeatureAvailable;\n}\n\n/**\n * Create service account\n * @param {string} name Human-readable name of service account\n * @param {string} description Description of service account\n * @param {'Active' | 'Inactive'} accountStatus Service account status\n * @param {string[]} scopes Scopes.\n * @param {JwksInterface} jwks Java Web Key Set\n * @returns {Promise<ObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function createServiceAccount(\n name: string,\n description: string,\n accountStatus: 'Active' | 'Inactive',\n scopes: string[],\n jwks: JwksInterface\n): Promise<ObjectSkeletonInterface> {\n const payload: SvcacctInterface = {\n name,\n description,\n accountStatus,\n scopes,\n jwks: JSON.stringify(jwks),\n };\n debugMessage(`SvcacctOps: createSvcacct: payload:`);\n debugMessage(payload);\n const result = await createManagedObject(moType, payload);\n return result;\n}\n"],"mappings":";;;;;;;AAAA;AAGA;AACA;AAA2C;AAAA;AAE3C,IAAMA,MAAM,GAAG,SAAS;AAUxB,IAAIC,+BAAwC,GAAGC,SAAS;AAAC,SACnCC,iCAAiC;EAAA;AAAA;AAiBvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;EAAA,uDAjBO,aAAqE;IAC1E,IAAAC,qBAAY,+DAA8D;IAC1E;IACA,IAAI,OAAOH,+BAA+B,KAAK,WAAW,EACxD,OAAOA,+BAA+B;IAExCA,+BAA+B,GAAG,KAAK;IACvC,IAAMI,MAAM,SAAS,IAAAC,uBAAe,EAAC,SAAS,CAAC;IAC/C,KAAK,IAAMC,MAAM,IAAIF,MAAM,CAAC,SAAS,CAAC,EAAE;MACtC,IAAIE,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,EAAEN,+BAA+B,GAAG,IAAI;IAC1E;IACA,IAAAG,qBAAY,gFAC6DH,+BAA+B,EACvG;IACD,OAAOA,+BAA+B;EACxC,CAAC;EAAA;AAAA;AAAA,SAWqBO,oBAAoB;EAAA;AAAA;AAAA;EAAA,0CAAnC,WACLC,IAAY,EACZC,WAAmB,EACnBC,aAAoC,EACpCC,MAAgB,EAChBC,IAAmB,EACe;IAClC,IAAMC,OAAyB,GAAG;MAChCL,IAAI;MACJC,WAAW;MACXC,aAAa;MACbC,MAAM;MACNC,IAAI,EAAEE,IAAI,CAACC,SAAS,CAACH,IAAI;IAC3B,CAAC;IACD,IAAAT,qBAAY,wCAAuC;IACnD,IAAAA,qBAAY,EAACU,OAAO,CAAC;IACrB,IAAMG,MAAM,SAAS,IAAAC,qCAAmB,EAAClB,MAAM,EAAEc,OAAO,CAAC;IACzD,OAAOG,MAAM;EACf,CAAC;EAAA;AAAA"}
1
+ {"version":3,"file":"ServiceAccountOps.js","names":["moType","serviceAccountsFeatureAvailable","undefined","isServiceAccountsFeatureAvailable","debugMessage","step","error","response","data","status","message","createServiceAccount","name","description","accountStatus","scopes","jwks","payload","JSON","stringify","result","createManagedObject"],"sources":["ops/ServiceAccountOps.ts"],"sourcesContent":["import { createManagedObject } from '../api/ManagedObjectApi';\nimport { JwksInterface } from './JoseOps';\nimport { ObjectSkeletonInterface } from '../api/ApiTypes';\nimport { debugMessage } from './utils/Console';\nimport { step } from '../api/AuthenticateApi';\n\nconst moType = 'svcacct';\n\nexport interface SvcacctInterface {\n name: string;\n description: string;\n accountStatus: 'Active' | 'Inactive';\n scopes: string[];\n jwks: string;\n}\n\n/**\n * Global flag indicating if service accounts are available\n */\nlet serviceAccountsFeatureAvailable: boolean = undefined;\n\n/**\n * Check if service accounts are available\n * @returns {Promise<boolean>} true if service accounts are available, false otherwise\n */\nexport async function isServiceAccountsFeatureAvailable(): Promise<boolean> {\n debugMessage(`ServiceAccountOps.isServiceAccountsFeatureAvailable: start`);\n // only perform check once\n if (typeof serviceAccountsFeatureAvailable !== 'undefined')\n return serviceAccountsFeatureAvailable;\n\n serviceAccountsFeatureAvailable = true;\n try {\n await step({}, {}, '/', 'FRServiceAccountInternal');\n } catch (error) {\n debugMessage(error.response?.data);\n if (\n error.response?.status === 400 &&\n error.response?.data?.message === 'No Configuration found'\n ) {\n serviceAccountsFeatureAvailable = false;\n }\n }\n debugMessage(\n `ServiceAccountOps.isServiceAccountsFeatureAvailable: end, available=${serviceAccountsFeatureAvailable}`\n );\n return serviceAccountsFeatureAvailable;\n}\n\n/**\n * Create service account\n * @param {string} name Human-readable name of service account\n * @param {string} description Description of service account\n * @param {'Active' | 'Inactive'} accountStatus Service account status\n * @param {string[]} scopes Scopes.\n * @param {JwksInterface} jwks Java Web Key Set\n * @returns {Promise<ObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function createServiceAccount(\n name: string,\n description: string,\n accountStatus: 'Active' | 'Inactive',\n scopes: string[],\n jwks: JwksInterface\n): Promise<ObjectSkeletonInterface> {\n debugMessage(`ServiceAccountOps.createServiceAccount: start`);\n const payload: SvcacctInterface = {\n name,\n description,\n accountStatus,\n scopes,\n jwks: JSON.stringify(jwks),\n };\n debugMessage(`ServiceAccountOps: createServiceAccount: payload:`);\n debugMessage(payload);\n const result = await createManagedObject(moType, payload);\n debugMessage(`ServiceAccountOps.createServiceAccount: end`);\n return result;\n}\n"],"mappings":";;;;;;;AAAA;AAGA;AACA;AAA8C;AAAA;AAE9C,IAAMA,MAAM,GAAG,SAAS;AAUxB;AACA;AACA;AACA,IAAIC,+BAAwC,GAAGC,SAAS;;AAExD;AACA;AACA;AACA;AAHA,SAIsBC,iCAAiC;EAAA;AAAA;AAwBvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;EAAA,uDAxBO,aAAqE;IAC1E,IAAAC,qBAAY,+DAA8D;IAC1E;IACA,IAAI,OAAOH,+BAA+B,KAAK,WAAW,EACxD,OAAOA,+BAA+B;IAExCA,+BAA+B,GAAG,IAAI;IACtC,IAAI;MACF,MAAM,IAAAI,qBAAI,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,0BAA0B,CAAC;IACrD,CAAC,CAAC,OAAOC,KAAK,EAAE;MAAA;MACd,IAAAF,qBAAY,qBAACE,KAAK,CAACC,QAAQ,oDAAd,gBAAgBC,IAAI,CAAC;MAClC,IACE,qBAAAF,KAAK,CAACC,QAAQ,qDAAd,iBAAgBE,MAAM,MAAK,GAAG,IAC9B,qBAAAH,KAAK,CAACC,QAAQ,8EAAd,iBAAgBC,IAAI,0DAApB,sBAAsBE,OAAO,MAAK,wBAAwB,EAC1D;QACAT,+BAA+B,GAAG,KAAK;MACzC;IACF;IACA,IAAAG,qBAAY,gFAC6DH,+BAA+B,EACvG;IACD,OAAOA,+BAA+B;EACxC,CAAC;EAAA;AAAA;AAAA,SAWqBU,oBAAoB;EAAA;AAAA;AAAA;EAAA,0CAAnC,WACLC,IAAY,EACZC,WAAmB,EACnBC,aAAoC,EACpCC,MAAgB,EAChBC,IAAmB,EACe;IAClC,IAAAZ,qBAAY,kDAAiD;IAC7D,IAAMa,OAAyB,GAAG;MAChCL,IAAI;MACJC,WAAW;MACXC,aAAa;MACbC,MAAM;MACNC,IAAI,EAAEE,IAAI,CAACC,SAAS,CAACH,IAAI;IAC3B,CAAC;IACD,IAAAZ,qBAAY,sDAAqD;IACjE,IAAAA,qBAAY,EAACa,OAAO,CAAC;IACrB,IAAMG,MAAM,SAAS,IAAAC,qCAAmB,EAACrB,MAAM,EAAEiB,OAAO,CAAC;IACzD,IAAAb,qBAAY,gDAA+C;IAC3D,OAAOgB,MAAM;EACf,CAAC;EAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceAccountOps.test.js","names":["mock","MockAdapter","axios","jest","setTimeout","outputHandler","message","console","log","state","setHost","setRealm","setCookieName","setCookieValue","setDeploymentType","globalConfig","CLOUD_DEPLOYMENT_TYPE_KEY","setDebug","setDebugHandler","setPrintHandler","setCurlirize","setCurlirizeHandler","describe","test","expect","ServiceAccount","createServiceAccount","toBeDefined","moId","moData","name","description","accountStatus","scopes","jwk","createJwkRsa","publicJwk","getJwkRsaPublic","jwks","createJwks","mockCreateManagedObject","mockManagedObjId","mockManagedObj","payload","isEqualJson","toBeTruthy","_id","toBe","toStrictEqual"],"sources":["ops/ServiceAccountOps.test.ts"],"sourcesContent":["import { jest } from '@jest/globals';\nimport axios from 'axios';\nimport MockAdapter from 'axios-mock-adapter';\nimport { state } from '../index';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { createJwkRsa, createJwks, getJwkRsaPublic } from './JoseOps';\nimport * as ServiceAccount from './ServiceAccountOps';\nimport { mockCreateManagedObject } from '../test/mocks/ForgeRockApiMockEngine';\nimport { isEqualJson } from './utils/OpsUtils';\n\nconst mock = new MockAdapter(axios);\n\n// Increase timeout for this test as pipeline keeps failing with error:\n// Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.\njest.setTimeout(30000);\n\nconst outputHandler = (message: string | object) => {\n console.log(message);\n};\n\nstate.setHost('https://openam-frodo-dev.forgeblocks.com/am');\nstate.setRealm('alpha');\nstate.setCookieName('cookieName');\nstate.setCookieValue('cookieValue');\nstate.setDeploymentType(globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY);\nstate.setDebug(true);\nstate.setDebugHandler(outputHandler);\nstate.setPrintHandler(outputHandler);\nstate.setCurlirize(true);\nstate.setCurlirizeHandler(outputHandler);\n\ndescribe('SvcacctOps - createSvcacct()', () => {\n test('createSvcacct() 0: Method is implemented', async () => {\n expect(ServiceAccount.createServiceAccount).toBeDefined();\n });\n\n test('createSvcacct() 1: Create service account', async () => {\n let moId: string | null = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let moData: any | null = null;\n const name = 'sa';\n const description = 'service account';\n const accountStatus = 'Active';\n const scopes = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwk = await createJwkRsa();\n const publicJwk = await getJwkRsaPublic(jwk);\n const jwks = await createJwks(publicJwk);\n mockCreateManagedObject(mock, (mockManagedObjId, mockManagedObj) => {\n moId = mockManagedObjId;\n moData = mockManagedObj;\n });\n const payload = await ServiceAccount.createServiceAccount(\n name,\n description,\n accountStatus,\n scopes,\n jwks\n );\n expect(isEqualJson(payload, moData)).toBeTruthy();\n expect(payload).toBeTruthy();\n expect(payload._id).toBe(moId);\n expect(payload.name).toBe(name);\n expect(payload.description).toBe(description);\n expect(payload.scopes).toStrictEqual(scopes);\n });\n});\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAA+C;AAAA;AAAA;AAAA;AAAA;AAE/C,IAAMA,IAAI,GAAG,IAAIC,yBAAW,CAACC,cAAK,CAAC;;AAEnC;AACA;AACAC,aAAI,CAACC,UAAU,CAAC,KAAK,CAAC;AAEtB,IAAMC,aAAa,GAAIC,OAAwB,IAAK;EAClDC,OAAO,CAACC,GAAG,CAACF,OAAO,CAAC;AACtB,CAAC;AAEDG,YAAK,CAACC,OAAO,CAAC,6CAA6C,CAAC;AAC5DD,YAAK,CAACE,QAAQ,CAAC,OAAO,CAAC;AACvBF,YAAK,CAACG,aAAa,CAAC,YAAY,CAAC;AACjCH,YAAK,CAACI,cAAc,CAAC,aAAa,CAAC;AACnCJ,YAAK,CAACK,iBAAiB,CAACC,YAAY,CAACC,yBAAyB,CAAC;AAC/DP,YAAK,CAACQ,QAAQ,CAAC,IAAI,CAAC;AACpBR,YAAK,CAACS,eAAe,CAACb,aAAa,CAAC;AACpCI,YAAK,CAACU,eAAe,CAACd,aAAa,CAAC;AACpCI,YAAK,CAACW,YAAY,CAAC,IAAI,CAAC;AACxBX,YAAK,CAACY,mBAAmB,CAAChB,aAAa,CAAC;AAExCiB,QAAQ,CAAC,8BAA8B,EAAE,MAAM;EAC7CC,IAAI,CAAC,0CAA0C,iCAAE,aAAY;IAC3DC,MAAM,CAACC,cAAc,CAACC,oBAAoB,CAAC,CAACC,WAAW,EAAE;EAC3D,CAAC,EAAC;EAEFJ,IAAI,CAAC,2CAA2C,iCAAE,aAAY;IAC5D,IAAIK,IAAmB,GAAG,IAAI;IAC9B;IACA,IAAIC,MAAkB,GAAG,IAAI;IAC7B,IAAMC,IAAI,GAAG,IAAI;IACjB,IAAMC,WAAW,GAAG,iBAAiB;IACrC,IAAMC,aAAa,GAAG,QAAQ;IAC9B,IAAMC,MAAM,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;IACtD,IAAMC,GAAG,SAAS,IAAAC,qBAAY,GAAE;IAChC,IAAMC,SAAS,SAAS,IAAAC,wBAAe,EAACH,GAAG,CAAC;IAC5C,IAAMI,IAAI,SAAS,IAAAC,mBAAU,EAACH,SAAS,CAAC;IACxC,IAAAI,+CAAuB,EAACxC,IAAI,EAAE,CAACyC,gBAAgB,EAAEC,cAAc,KAAK;MAClEd,IAAI,GAAGa,gBAAgB;MACvBZ,MAAM,GAAGa,cAAc;IACzB,CAAC,CAAC;IACF,IAAMC,OAAO,SAASlB,cAAc,CAACC,oBAAoB,CACvDI,IAAI,EACJC,WAAW,EACXC,aAAa,EACbC,MAAM,EACNK,IAAI,CACL;IACDd,MAAM,CAAC,IAAAoB,qBAAW,EAACD,OAAO,EAAEd,MAAM,CAAC,CAAC,CAACgB,UAAU,EAAE;IACjDrB,MAAM,CAACmB,OAAO,CAAC,CAACE,UAAU,EAAE;IAC5BrB,MAAM,CAACmB,OAAO,CAACG,GAAG,CAAC,CAACC,IAAI,CAACnB,IAAI,CAAC;IAC9BJ,MAAM,CAACmB,OAAO,CAACb,IAAI,CAAC,CAACiB,IAAI,CAACjB,IAAI,CAAC;IAC/BN,MAAM,CAACmB,OAAO,CAACZ,WAAW,CAAC,CAACgB,IAAI,CAAChB,WAAW,CAAC;IAC7CP,MAAM,CAACmB,OAAO,CAACV,MAAM,CAAC,CAACe,aAAa,CAACf,MAAM,CAAC;EAC9C,CAAC,EAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"ServiceAccountOps.test.js","names":["jest","setTimeout","matchConfig","defaultMatchRequestsBy","body","autoSetupPolly","describe","only","test","expect","ServiceAccount","isServiceAccountsFeatureAvailable","toBeDefined","response","toBeTruthy","createServiceAccount","name","description","accountStatus","scopes","jwk","createJwkRsa","publicJwk","getJwkRsaPublic","jwks","createJwks","toMatchSnapshot"],"sources":["ops/ServiceAccountOps.test.ts"],"sourcesContent":["/**\n * To record and update snapshots, you must perform 3 steps in order:\n *\n * 1. Record API responses\n *\n * To record API responses, you must call the test:record script and\n * override all the connection state variables required to connect to the\n * env to record from:\n *\n * FRODO_DEBUG=1 FRODO_HOST=frodo-dev npm run test:record ServiceAccountOps\n *\n * The above command assumes that you have a connection profile for\n * 'frodo-dev' on your development machine.\n *\n * 2. Update snapshots\n *\n * After recording API responses, you must manually update/create snapshots\n * by running:\n *\n * FRODO_DEBUG=1 npm run test:update ServiceAccountOps\n *\n * 3. Test your changes\n *\n * If 1 and 2 didn't produce any errors, you are ready to run the tests in\n * replay mode and make sure they all succeed as well:\n *\n * npm run test:only ServiceAccountOps\n *\n * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output\n * in case things don't function as expected\n */\nimport { jest } from '@jest/globals';\nimport { createJwkRsa, createJwks, getJwkRsaPublic } from './JoseOps';\nimport * as ServiceAccount from './ServiceAccountOps';\nimport {\n autoSetupPolly,\n defaultMatchRequestsBy,\n} from '../utils/AutoSetupPolly';\n\n// Increase timeout for this test as pipeline keeps failing with error:\n// Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.\njest.setTimeout(30000);\n\n// need to modify the default matching rules to allow the mocking to work for service account tests.\nconst matchConfig = defaultMatchRequestsBy();\nmatchConfig.body = false; // service account create requests are tricky because of the public key, which is different for each request\n\nautoSetupPolly(matchConfig);\n\ndescribe.only('ServiceAccountOps', () => {\n describe('isServiceAccountsFeatureAvailable()', () => {\n test('0: Method is implemented', async () => {\n expect(ServiceAccount.isServiceAccountsFeatureAvailable).toBeDefined();\n });\n\n test('1: Check tenant supporting service accounts', async () => {\n const response = await ServiceAccount.isServiceAccountsFeatureAvailable();\n expect(response).toBeTruthy();\n });\n\n // test('2: Check tenant not supporting service accounts', async () => {\n // (context.polly as Polly).server.any().on('request', (req) => {\n // req.overrideRecordingName(\n // 'ServiceAccountOps/isServiceAccountsFeatureAvailable()/2: Check tenant not supporting service accounts'\n // );\n // console.log(`+++++polly: recordingName: ${req.recordingName}`);\n // });\n // const response = await ServiceAccount.isServiceAccountsFeatureAvailable();\n // expect(response).toBeFalsy();\n // });\n });\n\n describe('createServiceAccount()', () => {\n test('0: Method is implemented', async () => {\n expect(ServiceAccount.createServiceAccount).toBeDefined();\n });\n\n test('1: Create service account', async () => {\n const name = 'sa';\n const description = 'service account';\n const accountStatus = 'Active';\n const scopes = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwk = await createJwkRsa();\n const publicJwk = await getJwkRsaPublic(jwk);\n const jwks = createJwks(publicJwk);\n const response = await ServiceAccount.createServiceAccount(\n name,\n description,\n accountStatus,\n scopes,\n jwks\n );\n expect(response).toMatchSnapshot();\n });\n });\n});\n"],"mappings":";;AA+BA;AACA;AACA;AACA;AAGiC;AAAA;AAAA;AAAA;AAEjC;AACA;AACAA,aAAI,CAACC,UAAU,CAAC,KAAK,CAAC;;AAEtB;AACA,IAAMC,WAAW,GAAG,IAAAC,sCAAsB,GAAE;AAC5CD,WAAW,CAACE,IAAI,GAAG,KAAK,CAAC,CAAC;;AAE1B,IAAAC,8BAAc,EAACH,WAAW,CAAC;AAE3BI,QAAQ,CAACC,IAAI,CAAC,mBAAmB,EAAE,MAAM;EACvCD,QAAQ,CAAC,qCAAqC,EAAE,MAAM;IACpDE,IAAI,CAAC,0BAA0B,iCAAE,aAAY;MAC3CC,MAAM,CAACC,cAAc,CAACC,iCAAiC,CAAC,CAACC,WAAW,EAAE;IACxE,CAAC,EAAC;IAEFJ,IAAI,CAAC,6CAA6C,iCAAE,aAAY;MAC9D,IAAMK,QAAQ,SAASH,cAAc,CAACC,iCAAiC,EAAE;MACzEF,MAAM,CAACI,QAAQ,CAAC,CAACC,UAAU,EAAE;IAC/B,CAAC,EAAC;;IAEF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACF,CAAC,CAAC;;EAEFR,QAAQ,CAAC,wBAAwB,EAAE,MAAM;IACvCE,IAAI,CAAC,0BAA0B,iCAAE,aAAY;MAC3CC,MAAM,CAACC,cAAc,CAACK,oBAAoB,CAAC,CAACH,WAAW,EAAE;IAC3D,CAAC,EAAC;IAEFJ,IAAI,CAAC,2BAA2B,iCAAE,aAAY;MAC5C,IAAMQ,IAAI,GAAG,IAAI;MACjB,IAAMC,WAAW,GAAG,iBAAiB;MACrC,IAAMC,aAAa,GAAG,QAAQ;MAC9B,IAAMC,MAAM,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;MACtD,IAAMC,GAAG,SAAS,IAAAC,qBAAY,GAAE;MAChC,IAAMC,SAAS,SAAS,IAAAC,wBAAe,EAACH,GAAG,CAAC;MAC5C,IAAMI,IAAI,GAAG,IAAAC,mBAAU,EAACH,SAAS,CAAC;MAClC,IAAMT,QAAQ,SAASH,cAAc,CAACK,oBAAoB,CACxDC,IAAI,EACJC,WAAW,EACXC,aAAa,EACbC,MAAM,EACNK,IAAI,CACL;MACDf,MAAM,CAACI,QAAQ,CAAC,CAACa,eAAe,EAAE;IACpC,CAAC,EAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -23,8 +23,17 @@ export function fillCallbacks(response, map) {
23
23
  }
24
24
  return body;
25
25
  }
26
- export async function step(body = {}, config = {}, realm = '/') {
27
- const urlString = state.getAuthenticationService() ? util.format(authenticateWithServiceUrlTemplate, state.getHost(), getRealmPath(realm), state.getAuthenticationService()) : util.format(authenticateUrlTemplate, state.getHost(), getRealmPath(realm));
26
+
27
+ /**
28
+ *
29
+ * @param {any} body POST request body
30
+ * @param {any} config request config
31
+ * @param {string} realm realm
32
+ * @param {string} service name of authentication service/journey
33
+ * @returns Promise resolving to the authentication service response
34
+ */
35
+ export async function step(body = {}, config = {}, realm = '/', service = undefined) {
36
+ const urlString = service || state.getAuthenticationService() ? util.format(authenticateWithServiceUrlTemplate, state.getHost(), getRealmPath(realm), service || state.getAuthenticationService()) : util.format(authenticateUrlTemplate, state.getHost(), getRealmPath(realm));
28
37
  const {
29
38
  data
30
39
  } = await generateAmApi(getApiConfig()).post(urlString, body, config);
@@ -85,7 +85,7 @@ export async function deleteConfigEntity(entityId) {
85
85
  * @param {string} pageCookie paged results cookie
86
86
  * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type
87
87
  */
88
- export async function queryAllManagedObjectsByType(type, fields, pageCookie) {
88
+ export async function queryAllManagedObjectsByType(type, fields = [], pageCookie = undefined) {
89
89
  const fieldsParam = fields.length > 0 ? `&_fields=${fields.join(',')}` : '&_fields=_id';
90
90
  const urlTemplate = pageCookie ? `${idmManagedObjectURLTemplate}${fieldsParam}&_pagedResultsCookie=${encodeURIComponent(pageCookie)}` : `${idmManagedObjectURLTemplate}${fieldsParam}`;
91
91
  const urlString = util.format(urlTemplate, getTenantURL(state.getHost()), type);
@@ -39,12 +39,12 @@ export async function putConfigEntity(entityId, entityData) {
39
39
 
40
40
  /**
41
41
  * Query managed objects
42
- * @param {String} type managed object type
43
- * @param {[String]} fields fields to retrieve
44
- * @param {String} pageCookie paged results cookie
42
+ * @param {string} type managed object type
43
+ * @param {string[]} fields fields to retrieve
44
+ * @param {string} pageCookie paged results cookie
45
45
  * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type
46
46
  */
47
- export async function queryAllManagedObjectsByType(type, fields, pageCookie) {
47
+ export async function queryAllManagedObjectsByType(type, fields = [], pageCookie = undefined) {
48
48
  return _queryAllManagedObjectsByType(type, fields, pageCookie);
49
49
  }
50
50
 
@@ -1,16 +1,29 @@
1
1
  import { createManagedObject } from '../api/ManagedObjectApi';
2
2
  import { debugMessage } from './utils/Console';
3
- import { getConfigEntity } from './IdmOps';
3
+ import { step } from '../api/AuthenticateApi';
4
4
  const moType = 'svcacct';
5
+ /**
6
+ * Global flag indicating if service accounts are available
7
+ */
5
8
  let serviceAccountsFeatureAvailable = undefined;
9
+
10
+ /**
11
+ * Check if service accounts are available
12
+ * @returns {Promise<boolean>} true if service accounts are available, false otherwise
13
+ */
6
14
  export async function isServiceAccountsFeatureAvailable() {
7
15
  debugMessage(`ServiceAccountOps.isServiceAccountsFeatureAvailable: start`);
8
- // only look up the schema once
16
+ // only perform check once
9
17
  if (typeof serviceAccountsFeatureAvailable !== 'undefined') return serviceAccountsFeatureAvailable;
10
- serviceAccountsFeatureAvailable = false;
11
- const schema = await getConfigEntity('managed');
12
- for (const object of schema['objects']) {
13
- if (object['name'] === 'svcacct') serviceAccountsFeatureAvailable = true;
18
+ serviceAccountsFeatureAvailable = true;
19
+ try {
20
+ await step({}, {}, '/', 'FRServiceAccountInternal');
21
+ } catch (error) {
22
+ var _error$response, _error$response2, _error$response3, _error$response3$data;
23
+ debugMessage((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data);
24
+ if (((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) === 400 && ((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : (_error$response3$data = _error$response3.data) === null || _error$response3$data === void 0 ? void 0 : _error$response3$data.message) === 'No Configuration found') {
25
+ serviceAccountsFeatureAvailable = false;
26
+ }
14
27
  }
15
28
  debugMessage(`ServiceAccountOps.isServiceAccountsFeatureAvailable: end, available=${serviceAccountsFeatureAvailable}`);
16
29
  return serviceAccountsFeatureAvailable;
@@ -26,6 +39,7 @@ export async function isServiceAccountsFeatureAvailable() {
26
39
  * @returns {Promise<ObjectSkeletonInterface>} A promise resolving to a service account object
27
40
  */
28
41
  export async function createServiceAccount(name, description, accountStatus, scopes, jwks) {
42
+ debugMessage(`ServiceAccountOps.createServiceAccount: start`);
29
43
  const payload = {
30
44
  name,
31
45
  description,
@@ -33,9 +47,10 @@ export async function createServiceAccount(name, description, accountStatus, sco
33
47
  scopes,
34
48
  jwks: JSON.stringify(jwks)
35
49
  };
36
- debugMessage(`SvcacctOps: createSvcacct: payload:`);
50
+ debugMessage(`ServiceAccountOps: createServiceAccount: payload:`);
37
51
  debugMessage(payload);
38
52
  const result = await createManagedObject(moType, payload);
53
+ debugMessage(`ServiceAccountOps.createServiceAccount: end`);
39
54
  return result;
40
55
  }
41
56
  //# sourceMappingURL=ServiceAccountOps.js.map
@@ -1,56 +1,85 @@
1
+ /**
2
+ * To record and update snapshots, you must perform 3 steps in order:
3
+ *
4
+ * 1. Record API responses
5
+ *
6
+ * To record API responses, you must call the test:record script and
7
+ * override all the connection state variables required to connect to the
8
+ * env to record from:
9
+ *
10
+ * FRODO_DEBUG=1 FRODO_HOST=frodo-dev npm run test:record ServiceAccountOps
11
+ *
12
+ * The above command assumes that you have a connection profile for
13
+ * 'frodo-dev' on your development machine.
14
+ *
15
+ * 2. Update snapshots
16
+ *
17
+ * After recording API responses, you must manually update/create snapshots
18
+ * by running:
19
+ *
20
+ * FRODO_DEBUG=1 npm run test:update ServiceAccountOps
21
+ *
22
+ * 3. Test your changes
23
+ *
24
+ * If 1 and 2 didn't produce any errors, you are ready to run the tests in
25
+ * replay mode and make sure they all succeed as well:
26
+ *
27
+ * npm run test:only ServiceAccountOps
28
+ *
29
+ * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output
30
+ * in case things don't function as expected
31
+ */
1
32
  import { jest } from '@jest/globals';
2
- import axios from 'axios';
3
- import MockAdapter from 'axios-mock-adapter';
4
- import { state } from '../index';
5
- import * as globalConfig from '../storage/StaticStorage';
6
33
  import { createJwkRsa, createJwks, getJwkRsaPublic } from './JoseOps';
7
34
  import * as ServiceAccount from './ServiceAccountOps';
8
- import { mockCreateManagedObject } from '../test/mocks/ForgeRockApiMockEngine';
9
- import { isEqualJson } from './utils/OpsUtils';
10
- const mock = new MockAdapter(axios);
35
+ import { autoSetupPolly, defaultMatchRequestsBy } from '../utils/AutoSetupPolly';
11
36
 
12
37
  // Increase timeout for this test as pipeline keeps failing with error:
13
38
  // Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.
14
39
  jest.setTimeout(30000);
15
- const outputHandler = message => {
16
- console.log(message);
17
- };
18
- state.setHost('https://openam-frodo-dev.forgeblocks.com/am');
19
- state.setRealm('alpha');
20
- state.setCookieName('cookieName');
21
- state.setCookieValue('cookieValue');
22
- state.setDeploymentType(globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY);
23
- state.setDebug(true);
24
- state.setDebugHandler(outputHandler);
25
- state.setPrintHandler(outputHandler);
26
- state.setCurlirize(true);
27
- state.setCurlirizeHandler(outputHandler);
28
- describe('SvcacctOps - createSvcacct()', () => {
29
- test('createSvcacct() 0: Method is implemented', async () => {
30
- expect(ServiceAccount.createServiceAccount).toBeDefined();
40
+
41
+ // need to modify the default matching rules to allow the mocking to work for service account tests.
42
+ const matchConfig = defaultMatchRequestsBy();
43
+ matchConfig.body = false; // service account create requests are tricky because of the public key, which is different for each request
44
+
45
+ autoSetupPolly(matchConfig);
46
+ describe.only('ServiceAccountOps', () => {
47
+ describe('isServiceAccountsFeatureAvailable()', () => {
48
+ test('0: Method is implemented', async () => {
49
+ expect(ServiceAccount.isServiceAccountsFeatureAvailable).toBeDefined();
50
+ });
51
+ test('1: Check tenant supporting service accounts', async () => {
52
+ const response = await ServiceAccount.isServiceAccountsFeatureAvailable();
53
+ expect(response).toBeTruthy();
54
+ });
55
+
56
+ // test('2: Check tenant not supporting service accounts', async () => {
57
+ // (context.polly as Polly).server.any().on('request', (req) => {
58
+ // req.overrideRecordingName(
59
+ // 'ServiceAccountOps/isServiceAccountsFeatureAvailable()/2: Check tenant not supporting service accounts'
60
+ // );
61
+ // console.log(`+++++polly: recordingName: ${req.recordingName}`);
62
+ // });
63
+ // const response = await ServiceAccount.isServiceAccountsFeatureAvailable();
64
+ // expect(response).toBeFalsy();
65
+ // });
31
66
  });
32
- test('createSvcacct() 1: Create service account', async () => {
33
- let moId = null;
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
- let moData = null;
36
- const name = 'sa';
37
- const description = 'service account';
38
- const accountStatus = 'Active';
39
- const scopes = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];
40
- const jwk = await createJwkRsa();
41
- const publicJwk = await getJwkRsaPublic(jwk);
42
- const jwks = await createJwks(publicJwk);
43
- mockCreateManagedObject(mock, (mockManagedObjId, mockManagedObj) => {
44
- moId = mockManagedObjId;
45
- moData = mockManagedObj;
67
+
68
+ describe('createServiceAccount()', () => {
69
+ test('0: Method is implemented', async () => {
70
+ expect(ServiceAccount.createServiceAccount).toBeDefined();
71
+ });
72
+ test('1: Create service account', async () => {
73
+ const name = 'sa';
74
+ const description = 'service account';
75
+ const accountStatus = 'Active';
76
+ const scopes = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];
77
+ const jwk = await createJwkRsa();
78
+ const publicJwk = await getJwkRsaPublic(jwk);
79
+ const jwks = createJwks(publicJwk);
80
+ const response = await ServiceAccount.createServiceAccount(name, description, accountStatus, scopes, jwks);
81
+ expect(response).toMatchSnapshot();
46
82
  });
47
- const payload = await ServiceAccount.createServiceAccount(name, description, accountStatus, scopes, jwks);
48
- expect(isEqualJson(payload, moData)).toBeTruthy();
49
- expect(payload).toBeTruthy();
50
- expect(payload._id).toBe(moId);
51
- expect(payload.name).toBe(name);
52
- expect(payload.description).toBe(description);
53
- expect(payload.scopes).toStrictEqual(scopes);
54
83
  });
55
84
  });
56
85
  //# sourceMappingURL=ServiceAccountOps.test.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-lib",
3
- "version": "0.17.5",
3
+ "version": "0.17.6",
4
4
  "type": "commonjs",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.mjs",
@@ -8,4 +8,12 @@
8
8
  export declare function fillCallbacks(response: object, map: {
9
9
  [k: string]: string | number | boolean | string[];
10
10
  }): object;
11
- export declare function step(body?: {}, config?: {}, realm?: string): Promise<any>;
11
+ /**
12
+ *
13
+ * @param {any} body POST request body
14
+ * @param {any} config request config
15
+ * @param {string} realm realm
16
+ * @param {string} service name of authentication service/journey
17
+ * @returns Promise resolving to the authentication service response
18
+ */
19
+ export declare function step(body?: {}, config?: {}, realm?: string, service?: string): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/AuthenticateApi.ts"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAA;CAAE,GACzD,MAAM,CAMR;AAED,wBAAsB,IAAI,CAAC,IAAI,KAAK,EAAE,MAAM,KAAK,EAAE,KAAK,SAAM,gBAmB7D","file":"AuthenticateApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateAmApi } from './BaseApi';\nimport * as state from '../shared/State';\nimport { getRealmPath } from './utils/ApiUtils';\n\nconst authenticateUrlTemplate = '%s/json%s/authenticate';\nconst authenticateWithServiceUrlTemplate = `${authenticateUrlTemplate}?authIndexType=service&authIndexValue=%s`;\n\nconst apiVersion = 'resource=2.0, protocol=1.0';\nconst getApiConfig = () => ({\n apiVersion,\n});\n\n/**\n * Fill callbacks from a map\n * Just a start\n * @param {object} response json response from a call to /authenticate\n * @param {{ [k: string]: string | number | boolean | string[] }} map name/value map\n * @returns filled response body so it can be used as input to another call to /authenticate\n */\nexport function fillCallbacks(\n response: object,\n map: { [k: string]: string | number | boolean | string[] }\n): object {\n const body = JSON.parse(JSON.stringify(response));\n for (const callback of body.callbacks) {\n callback.input[0].value = map[callback.input[0].name];\n }\n return body;\n}\n\nexport async function step(body = {}, config = {}, realm = '/') {\n const urlString = state.getAuthenticationService()\n ? util.format(\n authenticateWithServiceUrlTemplate,\n state.getHost(),\n getRealmPath(realm),\n state.getAuthenticationService()\n )\n : util.format(\n authenticateUrlTemplate,\n state.getHost(),\n getRealmPath(realm)\n );\n const { data } = await generateAmApi(getApiConfig()).post(\n urlString,\n body,\n config\n );\n return data;\n}\n"]}
1
+ {"version":3,"sources":["../src/api/AuthenticateApi.ts"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAA;CAAE,GACzD,MAAM,CAMR;AAED;;;;;;;GAOG;AACH,wBAAsB,IAAI,CACxB,IAAI,KAAK,EACT,MAAM,KAAK,EACX,KAAK,SAAM,EACX,OAAO,GAAE,MAAkB,gBAqB5B","file":"AuthenticateApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateAmApi } from './BaseApi';\nimport * as state from '../shared/State';\nimport { getRealmPath } from './utils/ApiUtils';\n\nconst authenticateUrlTemplate = '%s/json%s/authenticate';\nconst authenticateWithServiceUrlTemplate = `${authenticateUrlTemplate}?authIndexType=service&authIndexValue=%s`;\n\nconst apiVersion = 'resource=2.0, protocol=1.0';\nconst getApiConfig = () => ({\n apiVersion,\n});\n\n/**\n * Fill callbacks from a map\n * Just a start\n * @param {object} response json response from a call to /authenticate\n * @param {{ [k: string]: string | number | boolean | string[] }} map name/value map\n * @returns filled response body so it can be used as input to another call to /authenticate\n */\nexport function fillCallbacks(\n response: object,\n map: { [k: string]: string | number | boolean | string[] }\n): object {\n const body = JSON.parse(JSON.stringify(response));\n for (const callback of body.callbacks) {\n callback.input[0].value = map[callback.input[0].name];\n }\n return body;\n}\n\n/**\n *\n * @param {any} body POST request body\n * @param {any} config request config\n * @param {string} realm realm\n * @param {string} service name of authentication service/journey\n * @returns Promise resolving to the authentication service response\n */\nexport async function step(\n body = {},\n config = {},\n realm = '/',\n service: string = undefined\n) {\n const urlString =\n service || state.getAuthenticationService()\n ? util.format(\n authenticateWithServiceUrlTemplate,\n state.getHost(),\n getRealmPath(realm),\n service || state.getAuthenticationService()\n )\n : util.format(\n authenticateUrlTemplate,\n state.getHost(),\n getRealmPath(realm)\n );\n const { data } = await generateAmApi(getApiConfig()).post(\n urlString,\n body,\n config\n );\n return data;\n}\n"]}
@@ -35,7 +35,7 @@ export declare function deleteConfigEntity(entityId: string): Promise<any>;
35
35
  * @param {string} pageCookie paged results cookie
36
36
  * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type
37
37
  */
38
- export declare function queryAllManagedObjectsByType(type: string, fields: string[], pageCookie: string): Promise<{
38
+ export declare function queryAllManagedObjectsByType(type: string, fields?: string[], pageCookie?: string): Promise<{
39
39
  result: unknown[];
40
40
  resultCount: number;
41
41
  pagedResultsCookie: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/IdmConfigApi.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAsB,oBAAoB,iBAOzC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,KAAA,gBAQjD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,QAAQ,KAAA,gBAQ7C;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,MAAM,gBAa5B;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,gBAUxD;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC,CAeD","file":"IdmConfigApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateIdmApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport * as state from '../shared/State';\n\nconst idmAllConfigURLTemplate = '%s/openidm/config';\nconst idmConfigURLTemplate = '%s/openidm/config/%s';\nconst idmConfigEntityQueryTemplate = '%s/openidm/config?_queryFilter=%s';\nconst idmManagedObjectURLTemplate =\n '%s/openidm/managed/%s?_queryFilter=true&_pageSize=10000';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n const urlString = util.format(\n idmAllConfigURLTemplate,\n getTenantURL(state.getHost())\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Get IDM config entities by type\n * @param {string} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n const urlString = util.format(\n idmConfigEntityQueryTemplate,\n getTenantURL(state.getHost()),\n encodeURIComponent(`_id sw '${type}'`)\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n try {\n const { data } = await generateIdmApi().put(urlString, entityData);\n return data;\n } catch (error) {\n throw Error(`Could not put config entity ${entityId}: ${error}`);\n }\n}\n\n/**\n * Delete IDM config entity\n * @param {string} entityId config entity id\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function deleteConfigEntity(entityId: string) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n const { data } = await generateIdmApi().delete(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Query managed objects\n * @param {string} type managed object type\n * @param {string[]} fields fields to retrieve\n * @param {string} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type: string,\n fields: string[],\n pageCookie: string\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n const fieldsParam =\n fields.length > 0 ? `&_fields=${fields.join(',')}` : '&_fields=_id';\n const urlTemplate = pageCookie\n ? `${idmManagedObjectURLTemplate}${fieldsParam}&_pagedResultsCookie=${encodeURIComponent(\n pageCookie\n )}`\n : `${idmManagedObjectURLTemplate}${fieldsParam}`;\n const urlString = util.format(\n urlTemplate,\n getTenantURL(state.getHost()),\n type\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n"]}
1
+ {"version":3,"sources":["../src/api/IdmConfigApi.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAsB,oBAAoB,iBAOzC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,KAAA,gBAQjD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,QAAQ,KAAA,gBAQ7C;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,MAAM,gBAa5B;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,gBAUxD;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAM,EAAO,EACrB,UAAU,GAAE,MAAkB,GAC7B,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC,CAeD","file":"IdmConfigApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateIdmApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport * as state from '../shared/State';\n\nconst idmAllConfigURLTemplate = '%s/openidm/config';\nconst idmConfigURLTemplate = '%s/openidm/config/%s';\nconst idmConfigEntityQueryTemplate = '%s/openidm/config?_queryFilter=%s';\nconst idmManagedObjectURLTemplate =\n '%s/openidm/managed/%s?_queryFilter=true&_pageSize=10000';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n const urlString = util.format(\n idmAllConfigURLTemplate,\n getTenantURL(state.getHost())\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Get IDM config entities by type\n * @param {string} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n const urlString = util.format(\n idmConfigEntityQueryTemplate,\n getTenantURL(state.getHost()),\n encodeURIComponent(`_id sw '${type}'`)\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n try {\n const { data } = await generateIdmApi().put(urlString, entityData);\n return data;\n } catch (error) {\n throw Error(`Could not put config entity ${entityId}: ${error}`);\n }\n}\n\n/**\n * Delete IDM config entity\n * @param {string} entityId config entity id\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function deleteConfigEntity(entityId: string) {\n const urlString = util.format(\n idmConfigURLTemplate,\n getTenantURL(state.getHost()),\n entityId\n );\n const { data } = await generateIdmApi().delete(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Query managed objects\n * @param {string} type managed object type\n * @param {string[]} fields fields to retrieve\n * @param {string} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type: string,\n fields: string[] = [],\n pageCookie: string = undefined\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n const fieldsParam =\n fields.length > 0 ? `&_fields=${fields.join(',')}` : '&_fields=_id';\n const urlTemplate = pageCookie\n ? `${idmManagedObjectURLTemplate}${fieldsParam}&_pagedResultsCookie=${encodeURIComponent(\n pageCookie\n )}`\n : `${idmManagedObjectURLTemplate}${fieldsParam}`;\n const urlString = util.format(\n urlTemplate,\n getTenantURL(state.getHost()),\n type\n );\n const { data } = await generateIdmApi().get(urlString);\n return data;\n}\n"]}
@@ -25,12 +25,12 @@ export declare function getConfigEntity(entityId: any): Promise<any>;
25
25
  export declare function putConfigEntity(entityId: string, entityData: string | object): Promise<any>;
26
26
  /**
27
27
  * Query managed objects
28
- * @param {String} type managed object type
29
- * @param {[String]} fields fields to retrieve
30
- * @param {String} pageCookie paged results cookie
28
+ * @param {string} type managed object type
29
+ * @param {string[]} fields fields to retrieve
30
+ * @param {string} pageCookie paged results cookie
31
31
  * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type
32
32
  */
33
- export declare function queryAllManagedObjectsByType(type: any, fields: any, pageCookie: any): Promise<{
33
+ export declare function queryAllManagedObjectsByType(type: string, fields?: string[], pageCookie?: string): Promise<{
34
34
  result: unknown[];
35
35
  resultCount: number;
36
36
  pagedResultsCookie: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ops/IdmOps.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,8BAA8B,EAC/B,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,wBAAsB,oBAAoB,iBAEzC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,KAAA,gBAEjD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,QAAQ,KAAA,gBAE7C;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,MAAM,gBAG5B;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,KAAA,EACJ,MAAM,KAAA,EACN,UAAU,KAAA,GACT,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC,CAED;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CACnD,8BAA8B,EAAE,CACjC,CAGA","file":"IdmOps.d.ts","sourcesContent":["import {\n getAllConfigEntities as _getAllConfigEntities,\n getConfigEntity as _getConfigEntity,\n putConfigEntity as _putConfigEntity,\n getConfigEntitiesByType as _getConfigEntitiesByType,\n queryAllManagedObjectsByType as _queryAllManagedObjectsByType,\n} from '../api/IdmConfigApi';\nimport {\n testConnectorServers as _testConnectorServers,\n ConnectorServerStatusInterface,\n} from '../api/IdmSystemApi';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n return _getAllConfigEntities();\n}\n\n/**\n * Get IDM config entities by type\n * @param {String} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n return _getConfigEntitiesByType(type);\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n return _getConfigEntity(entityId);\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n return _putConfigEntity(entityId, entityData);\n}\n\n/**\n * Query managed objects\n * @param {String} type managed object type\n * @param {[String]} fields fields to retrieve\n * @param {String} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type,\n fields,\n pageCookie\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n return _queryAllManagedObjectsByType(type, fields, pageCookie);\n}\n\n/**\n * Test connector servers\n * @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects\n */\nexport async function testConnectorServers(): Promise<\n ConnectorServerStatusInterface[]\n> {\n const response = await _testConnectorServers();\n return response.openicf;\n}\n"]}
1
+ {"version":3,"sources":["../src/ops/IdmOps.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,8BAA8B,EAC/B,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,wBAAsB,oBAAoB,iBAEzC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,KAAA,gBAEjD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,QAAQ,KAAA,gBAE7C;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,MAAM,gBAG5B;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAM,EAAO,EACrB,UAAU,GAAE,MAAkB,GAC7B,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC,CAED;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CACnD,8BAA8B,EAAE,CACjC,CAGA","file":"IdmOps.d.ts","sourcesContent":["import {\n getAllConfigEntities as _getAllConfigEntities,\n getConfigEntity as _getConfigEntity,\n putConfigEntity as _putConfigEntity,\n getConfigEntitiesByType as _getConfigEntitiesByType,\n queryAllManagedObjectsByType as _queryAllManagedObjectsByType,\n} from '../api/IdmConfigApi';\nimport {\n testConnectorServers as _testConnectorServers,\n ConnectorServerStatusInterface,\n} from '../api/IdmSystemApi';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n return _getAllConfigEntities();\n}\n\n/**\n * Get IDM config entities by type\n * @param {String} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n return _getConfigEntitiesByType(type);\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n return _getConfigEntity(entityId);\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n return _putConfigEntity(entityId, entityData);\n}\n\n/**\n * Query managed objects\n * @param {string} type managed object type\n * @param {string[]} fields fields to retrieve\n * @param {string} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type: string,\n fields: string[] = [],\n pageCookie: string = undefined\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n return _queryAllManagedObjectsByType(type, fields, pageCookie);\n}\n\n/**\n * Test connector servers\n * @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects\n */\nexport async function testConnectorServers(): Promise<\n ConnectorServerStatusInterface[]\n> {\n const response = await _testConnectorServers();\n return response.openicf;\n}\n"]}
@@ -7,6 +7,10 @@ export interface SvcacctInterface {
7
7
  scopes: string[];
8
8
  jwks: string;
9
9
  }
10
+ /**
11
+ * Check if service accounts are available
12
+ * @returns {Promise<boolean>} true if service accounts are available, false otherwise
13
+ */
10
14
  export declare function isServiceAccountsFeatureAvailable(): Promise<boolean>;
11
15
  /**
12
16
  * Create service account
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ops/ServiceAccountOps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAM1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,OAAO,CAAC,CAe1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,QAAQ,GAAG,UAAU,EACpC,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAYlC","file":"ServiceAccountOps.d.ts","sourcesContent":["import { createManagedObject } from '../api/ManagedObjectApi';\nimport { JwksInterface } from './JoseOps';\nimport { ObjectSkeletonInterface } from '../api/ApiTypes';\nimport { debugMessage } from './utils/Console';\nimport { getConfigEntity } from './IdmOps';\n\nconst moType = 'svcacct';\n\nexport interface SvcacctInterface {\n name: string;\n description: string;\n accountStatus: 'Active' | 'Inactive';\n scopes: string[];\n jwks: string;\n}\n\nlet serviceAccountsFeatureAvailable: boolean = undefined;\nexport async function isServiceAccountsFeatureAvailable(): Promise<boolean> {\n debugMessage(`ServiceAccountOps.isServiceAccountsFeatureAvailable: start`);\n // only look up the schema once\n if (typeof serviceAccountsFeatureAvailable !== 'undefined')\n return serviceAccountsFeatureAvailable;\n\n serviceAccountsFeatureAvailable = false;\n const schema = await getConfigEntity('managed');\n for (const object of schema['objects']) {\n if (object['name'] === 'svcacct') serviceAccountsFeatureAvailable = true;\n }\n debugMessage(\n `ServiceAccountOps.isServiceAccountsFeatureAvailable: end, available=${serviceAccountsFeatureAvailable}`\n );\n return serviceAccountsFeatureAvailable;\n}\n\n/**\n * Create service account\n * @param {string} name Human-readable name of service account\n * @param {string} description Description of service account\n * @param {'Active' | 'Inactive'} accountStatus Service account status\n * @param {string[]} scopes Scopes.\n * @param {JwksInterface} jwks Java Web Key Set\n * @returns {Promise<ObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function createServiceAccount(\n name: string,\n description: string,\n accountStatus: 'Active' | 'Inactive',\n scopes: string[],\n jwks: JwksInterface\n): Promise<ObjectSkeletonInterface> {\n const payload: SvcacctInterface = {\n name,\n description,\n accountStatus,\n scopes,\n jwks: JSON.stringify(jwks),\n };\n debugMessage(`SvcacctOps: createSvcacct: payload:`);\n debugMessage(payload);\n const result = await createManagedObject(moType, payload);\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../src/ops/ServiceAccountOps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAM1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAOD;;;GAGG;AACH,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,OAAO,CAAC,CAsB1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,QAAQ,GAAG,UAAU,EACpC,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAclC","file":"ServiceAccountOps.d.ts","sourcesContent":["import { createManagedObject } from '../api/ManagedObjectApi';\nimport { JwksInterface } from './JoseOps';\nimport { ObjectSkeletonInterface } from '../api/ApiTypes';\nimport { debugMessage } from './utils/Console';\nimport { step } from '../api/AuthenticateApi';\n\nconst moType = 'svcacct';\n\nexport interface SvcacctInterface {\n name: string;\n description: string;\n accountStatus: 'Active' | 'Inactive';\n scopes: string[];\n jwks: string;\n}\n\n/**\n * Global flag indicating if service accounts are available\n */\nlet serviceAccountsFeatureAvailable: boolean = undefined;\n\n/**\n * Check if service accounts are available\n * @returns {Promise<boolean>} true if service accounts are available, false otherwise\n */\nexport async function isServiceAccountsFeatureAvailable(): Promise<boolean> {\n debugMessage(`ServiceAccountOps.isServiceAccountsFeatureAvailable: start`);\n // only perform check once\n if (typeof serviceAccountsFeatureAvailable !== 'undefined')\n return serviceAccountsFeatureAvailable;\n\n serviceAccountsFeatureAvailable = true;\n try {\n await step({}, {}, '/', 'FRServiceAccountInternal');\n } catch (error) {\n debugMessage(error.response?.data);\n if (\n error.response?.status === 400 &&\n error.response?.data?.message === 'No Configuration found'\n ) {\n serviceAccountsFeatureAvailable = false;\n }\n }\n debugMessage(\n `ServiceAccountOps.isServiceAccountsFeatureAvailable: end, available=${serviceAccountsFeatureAvailable}`\n );\n return serviceAccountsFeatureAvailable;\n}\n\n/**\n * Create service account\n * @param {string} name Human-readable name of service account\n * @param {string} description Description of service account\n * @param {'Active' | 'Inactive'} accountStatus Service account status\n * @param {string[]} scopes Scopes.\n * @param {JwksInterface} jwks Java Web Key Set\n * @returns {Promise<ObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function createServiceAccount(\n name: string,\n description: string,\n accountStatus: 'Active' | 'Inactive',\n scopes: string[],\n jwks: JwksInterface\n): Promise<ObjectSkeletonInterface> {\n debugMessage(`ServiceAccountOps.createServiceAccount: start`);\n const payload: SvcacctInterface = {\n name,\n description,\n accountStatus,\n scopes,\n jwks: JSON.stringify(jwks),\n };\n debugMessage(`ServiceAccountOps: createServiceAccount: payload:`);\n debugMessage(payload);\n const result = await createManagedObject(moType, payload);\n debugMessage(`ServiceAccountOps.createServiceAccount: end`);\n return result;\n}\n"]}