@rockcarver/frodo-lib 0.12.1 → 0.12.2-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/cjs/api/BaseApi.js +36 -8
  3. package/cjs/api/BaseApi.js.map +1 -1
  4. package/cjs/api/NodeApi.js +190 -0
  5. package/cjs/api/NodeApi.js.map +1 -0
  6. package/cjs/api/NodeApi.test.js.map +1 -0
  7. package/cjs/api/StartupApi.js +21 -8
  8. package/cjs/api/StartupApi.js.map +1 -1
  9. package/cjs/api/StartupApi.test.js.map +1 -0
  10. package/cjs/api/TreeApi.js +28 -161
  11. package/cjs/api/TreeApi.js.map +1 -1
  12. package/cjs/api/TreeApi.test.js.map +1 -0
  13. package/cjs/index.js +15 -5
  14. package/cjs/index.js.map +1 -1
  15. package/cjs/ops/IdpOps.js +1 -1
  16. package/cjs/ops/IdpOps.js.map +1 -1
  17. package/cjs/ops/JourneyOps.js +202 -203
  18. package/cjs/ops/JourneyOps.js.map +1 -1
  19. package/cjs/ops/StartupOps.js +61 -71
  20. package/cjs/ops/StartupOps.js.map +1 -1
  21. package/cjs/ops/utils/Console.js +3 -2
  22. package/cjs/ops/utils/Console.js.map +1 -1
  23. package/esm/api/BaseApi.mjs +35 -7
  24. package/esm/api/NodeApi.mjs +114 -0
  25. package/esm/api/NodeApi.test.mjs +105 -0
  26. package/esm/api/StartupApi.mjs +18 -8
  27. package/esm/api/StartupApi.test.mjs +56 -0
  28. package/esm/api/TreeApi.mjs +27 -99
  29. package/esm/api/TreeApi.test.mjs +175 -0
  30. package/esm/index.mjs +7 -5
  31. package/esm/ops/IdpOps.mjs +1 -1
  32. package/esm/ops/JourneyOps.mjs +165 -154
  33. package/esm/ops/StartupOps.mjs +59 -62
  34. package/esm/ops/utils/Console.mjs +3 -2
  35. package/package.json +7 -4
  36. package/types/api/AuthenticateApi.d.ts +2 -0
  37. package/types/api/AuthenticateApi.d.ts.map +1 -0
  38. package/types/api/BaseApi.d.ts +50 -0
  39. package/types/api/BaseApi.d.ts.map +1 -0
  40. package/types/api/CirclesOfTrustApi.d.ts +24 -0
  41. package/types/api/CirclesOfTrustApi.d.ts.map +1 -0
  42. package/types/api/EmailTemplateApi.d.ts +22 -0
  43. package/types/api/EmailTemplateApi.d.ts.map +1 -0
  44. package/types/api/IdmConfigApi.d.ts +39 -0
  45. package/types/api/IdmConfigApi.d.ts.map +1 -0
  46. package/types/api/LogApi.d.ts +4 -0
  47. package/types/api/LogApi.d.ts.map +1 -0
  48. package/types/api/ManagedObjectApi.d.ts +21 -0
  49. package/types/api/ManagedObjectApi.d.ts.map +1 -0
  50. package/types/api/NodeApi.d.ts +38 -0
  51. package/types/api/NodeApi.d.ts.map +1 -0
  52. package/types/api/OAuth2ClientApi.d.ts +18 -0
  53. package/types/api/OAuth2ClientApi.d.ts.map +1 -0
  54. package/types/api/OAuth2OIDCApi.d.ts +22 -0
  55. package/types/api/OAuth2OIDCApi.d.ts.map +1 -0
  56. package/types/api/OAuth2ProviderApi.d.ts +5 -0
  57. package/types/api/OAuth2ProviderApi.d.ts.map +1 -0
  58. package/types/api/RealmApi.d.ts +30 -0
  59. package/types/api/RealmApi.d.ts.map +1 -0
  60. package/types/api/Saml2Api.d.ts +52 -0
  61. package/types/api/Saml2Api.d.ts.map +1 -0
  62. package/types/api/ScriptApi.d.ts +24 -0
  63. package/types/api/ScriptApi.d.ts.map +1 -0
  64. package/types/api/SecretsApi.d.ts +10 -0
  65. package/types/api/SecretsApi.d.ts.map +1 -0
  66. package/types/api/ServerInfoApi.d.ts +10 -0
  67. package/types/api/ServerInfoApi.d.ts.map +1 -0
  68. package/types/api/SocialIdentityProvidersApi.d.ts +31 -0
  69. package/types/api/SocialIdentityProvidersApi.d.ts.map +1 -0
  70. package/types/api/StartupApi.d.ts +14 -0
  71. package/types/api/StartupApi.d.ts.map +1 -0
  72. package/types/api/ThemeApi.d.ts +54 -0
  73. package/types/api/ThemeApi.d.ts.map +1 -0
  74. package/types/api/TreeApi.d.ts +24 -0
  75. package/types/api/TreeApi.d.ts.map +1 -0
  76. package/types/api/VariablesApi.d.ts +32 -0
  77. package/types/api/VariablesApi.d.ts.map +1 -0
  78. package/types/api/utils/ApiUtils.d.ts +29 -0
  79. package/types/api/utils/ApiUtils.d.ts.map +1 -0
  80. package/types/api/utils/Base64.d.ts +30 -0
  81. package/types/api/utils/Base64.d.ts.map +1 -0
  82. package/types/index.d.ts +26 -0
  83. package/types/index.d.ts.map +1 -0
  84. package/types/ops/AdminOps.d.ts +11 -0
  85. package/types/ops/AdminOps.d.ts.map +1 -0
  86. package/types/ops/AuthenticateOps.d.ts +6 -0
  87. package/types/ops/AuthenticateOps.d.ts.map +1 -0
  88. package/types/ops/CirclesOfTrustOps.d.ts +40 -0
  89. package/types/ops/CirclesOfTrustOps.d.ts.map +1 -0
  90. package/types/ops/ConnectionProfileOps.d.ts +47 -0
  91. package/types/ops/ConnectionProfileOps.d.ts.map +1 -0
  92. package/types/ops/EmailTemplateOps.d.ts +40 -0
  93. package/types/ops/EmailTemplateOps.d.ts.map +1 -0
  94. package/types/ops/IdmOps.d.ts +27 -0
  95. package/types/ops/IdmOps.d.ts.map +1 -0
  96. package/types/ops/IdpOps.d.ts +45 -0
  97. package/types/ops/IdpOps.d.ts.map +1 -0
  98. package/types/ops/JourneyOps.d.ts +145 -0
  99. package/types/ops/JourneyOps.d.ts.map +1 -0
  100. package/types/ops/LogOps.d.ts +5 -0
  101. package/types/ops/LogOps.d.ts.map +1 -0
  102. package/types/ops/ManagedObjectOps.d.ts +14 -0
  103. package/types/ops/ManagedObjectOps.d.ts.map +1 -0
  104. package/types/ops/OAuth2ClientOps.d.ts +24 -0
  105. package/types/ops/OAuth2ClientOps.d.ts.map +1 -0
  106. package/types/ops/OrganizationOps.d.ts +11 -0
  107. package/types/ops/OrganizationOps.d.ts.map +1 -0
  108. package/types/ops/RealmOps.d.ts +22 -0
  109. package/types/ops/RealmOps.d.ts.map +1 -0
  110. package/types/ops/SamlOps.d.ts +51 -0
  111. package/types/ops/SamlOps.d.ts.map +1 -0
  112. package/types/ops/ScriptOps.d.ts +30 -0
  113. package/types/ops/ScriptOps.d.ts.map +1 -0
  114. package/types/ops/SecretsOps.d.ts +63 -0
  115. package/types/ops/SecretsOps.d.ts.map +1 -0
  116. package/types/ops/StartupOps.d.ts +25 -0
  117. package/types/ops/StartupOps.d.ts.map +1 -0
  118. package/types/ops/ThemeOps.d.ts +66 -0
  119. package/types/ops/ThemeOps.d.ts.map +1 -0
  120. package/types/ops/VariablesOps.d.ts +39 -0
  121. package/types/ops/VariablesOps.d.ts.map +1 -0
  122. package/types/ops/utils/Console.d.ts +63 -0
  123. package/types/ops/utils/Console.d.ts.map +1 -0
  124. package/types/ops/utils/DataProtection.d.ts +6 -0
  125. package/types/ops/utils/DataProtection.d.ts.map +1 -0
  126. package/types/ops/utils/ExportImportUtils.d.ts +22 -0
  127. package/types/ops/utils/ExportImportUtils.d.ts.map +1 -0
  128. package/types/ops/utils/OpsUtils.d.ts +27 -0
  129. package/types/ops/utils/OpsUtils.d.ts.map +1 -0
  130. package/types/ops/utils/Wordwrap.d.ts +1 -0
  131. package/types/ops/utils/Wordwrap.d.ts.map +1 -0
  132. package/types/storage/SessionStorage.d.ts +47 -0
  133. package/types/storage/SessionStorage.d.ts.map +1 -0
  134. package/types/storage/StaticStorage.d.ts +14 -0
  135. package/types/storage/StaticStorage.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/RealmApi.ts"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,wBAAsB,SAAS,qDAQ9B;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,EAAE,KAAA,oDAShC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,KAAA,gBASxC;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,EAAE,KAAA,EAAE,IAAI,KAAA,oDAStC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,EAAE,KAAA,oDASnC","file":"RealmApi.d.ts","sourcesContent":["import util from 'util';\nimport {\n getTenantURL,\n getCurrentRealmPath,\n getRealmName,\n} from './utils/ApiUtils';\nimport { generateAmApi } from './BaseApi';\nimport storage from '../storage/SessionStorage';\n\nconst realmsListURLTemplate = '%s/json/global-config/realms/?_queryFilter=true';\nconst realmURLTemplate = '%s/json/global-config/realms/%s';\n\nconst apiVersion = 'protocol=2.0,resource=1.0';\nconst getApiConfig = () => {\n const configPath = getCurrentRealmPath();\n return {\n path: `${configPath}/am/json/global-config/realms`,\n apiVersion,\n };\n};\n\n/**\n * Get all realms\n * @returns {Promise} a promise that resolves to an object containing an array of realm objects\n */\nexport async function getRealms() {\n const urlString = util.format(\n realmsListURLTemplate,\n storage.session.getTenant()\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get realm by id\n * @param {String} id realm id\n * @returns {Promise} a promise that resolves to an object containing a realm object\n */\nexport async function getRealm(id) {\n const urlString = util.format(\n realmURLTemplate,\n storage.session.getTenant(),\n id\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get realm by name\n * @param {String} name realm name\n * @returns {Promise} a promise that resolves to a realm object\n */\nexport async function getRealmByName(name) {\n return getRealms().then((realms) => {\n for (const realm of realms.data.result) {\n if (getRealmName(name) === realm.name) {\n return realm;\n }\n }\n throw new Error(`Realm ${name} not found!`);\n });\n}\n\n/**\n * Put realm\n * @param {String} id realm id\n * @param {Object} data realm config object\n * @returns {Promise} a promise that resolves to an object containing a realm object\n */\nexport async function putRealm(id, data) {\n const urlString = util.format(\n realmURLTemplate,\n storage.session.getTenant(),\n id\n );\n return generateAmApi(getApiConfig()).put(urlString, data, {\n withCredentials: true,\n });\n}\n\n/**\n * Delete realm\n * @param {String} id realm id\n * @returns {Promise} a promise that resolves to an object containing a realm object\n */\nexport async function deleteRealm(id) {\n const urlString = util.format(\n realmURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateAmApi(getApiConfig()).delete(urlString, {\n withCredentials: true,\n });\n}\n"]}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Get all SAML2 entity providers
3
+ * @returns {Promise} a promise that resolves to an array of saml2 entity stubs
4
+ */
5
+ export declare function getProviders(): Promise<import("axios").AxiosResponse<any, any>>;
6
+ /**
7
+ * Find all providers matching the filter and return the requested fields
8
+ * @param {String} filter CREST filter string, eg "entityId+eq+'${entityId}'"
9
+ * @param {String} fields Comma-delimited list of fields to include in the response
10
+ * @returns {Promise} a promise that resolves to an array of saml2 entities
11
+ */
12
+ export declare function findProviders(filter?: string, fields?: string): Promise<import("axios").AxiosResponse<any, any>>;
13
+ /**
14
+ * Geta SAML2 entity provider by location and id
15
+ * @param {String} location Entity provider location (hosted or remote)
16
+ * @param {String} entityId64 Base64-encoded provider entity id
17
+ * @returns {Promise} a promise that resolves to a saml2 entity provider object
18
+ */
19
+ export declare function getProviderByLocationAndId(location: any, entityId64: any): Promise<import("axios").AxiosResponse<any, any>>;
20
+ /**
21
+ * Get SAML2 entity provider by entity id
22
+ * @param {String} entityId Provider entity id
23
+ * @returns {Promise} a promise that resolves to a saml2 entity provider object or null
24
+ */
25
+ export declare function getProvider(entityId: any): Promise<import("axios").AxiosResponse<any, any>>;
26
+ /**
27
+ * Get a SAML2 entity provider's metadata URL by entity id
28
+ * @param {String} entityId SAML2 entity id
29
+ * @returns {String} the URL to get the metadata from
30
+ */
31
+ export declare function getProviderMetadataUrl(entityId: any): string;
32
+ /**
33
+ * Get a SAML2 entity provider's metadata by entity id
34
+ * @param {String} entityId SAML2 entity id
35
+ * @returns {Promise} a promise that resolves to an object containing a SAML2 metadata
36
+ */
37
+ export declare function getProviderMetadata(entityId: any): Promise<import("axios").AxiosResponse<any, any>>;
38
+ /**
39
+ * Create a SAML2 entity provider
40
+ * @param {String} location 'hosted' or 'remote'
41
+ * @param {Object} providerData Object representing a SAML entity provider
42
+ * @param {String} metaData Base64-encoded metadata XML. Only required for remote providers
43
+ * @returns {Promise} a promise that resolves to a saml2 entity provider object
44
+ */
45
+ export declare function createProvider(location: any, providerData: any, metaData: any): Promise<import("axios").AxiosResponse<any, any>>;
46
+ /**
47
+ * Update SAML2 entity provider
48
+ * @param {String} location Entity provider location (hosted or remote)
49
+ * @param {Object} providerData Object representing a SAML entity provider
50
+ * @returns {Promise} a promise that resolves to a saml2 entity provider object
51
+ */
52
+ export declare function updateProvider(location: any, providerData: any): Promise<import("axios").AxiosResponse<any, any>>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/Saml2Api.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,wBAAsB,YAAY,qDASjC;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,SAAS,EAAE,MAAM,SAAM,oDAWhE;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,KAAA,EAAE,UAAU,KAAA,oDAWpE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,QAAQ,KAAA,oDAazC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,KAAA,UAO9C;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,KAAA,oDAIjD;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,QAAQ,KAAA,EAAE,YAAY,KAAA,EAAE,QAAQ,KAAA,oDAyBpE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,QAAQ,KAAA,EAAE,YAAY,KAAA,oDAW1D","file":"Saml2Api.d.ts","sourcesContent":["import util from 'util';\nimport _ from 'lodash';\nimport { generateAmApi } from './BaseApi';\nimport { getCurrentRealmPath } from './utils/ApiUtils';\nimport storage from '../storage/SessionStorage';\n\nconst providerByLocationAndIdURLTemplate = '%s/json%s/realm-config/saml2/%s/%s';\nconst createHostedProviderURLTemplate =\n '%s/json%s/realm-config/saml2/hosted/?_action=create';\nconst createRemoteProviderURLTemplate =\n '%s/json%s/realm-config/saml2/remote/?_action=importEntity';\nconst queryAllProvidersURLTemplate =\n '%s/json%s/realm-config/saml2?_queryFilter=true';\nconst queryProvidersByEntityIdURLTemplate =\n '%s/json%s/realm-config/saml2?_queryFilter=%s&_fields=%s';\nconst metadataByEntityIdURLTemplate =\n '%s/saml2/jsp/exportmetadata.jsp?entityid=%s&realm=%s';\nconst apiVersion = 'protocol=2.1,resource=1.0';\nconst getApiConfig = () => {\n const configPath = getCurrentRealmPath();\n return {\n path: `${configPath}/realm-config/saml2`,\n apiVersion,\n };\n};\n\n/**\n * Get all SAML2 entity providers\n * @returns {Promise} a promise that resolves to an array of saml2 entity stubs\n */\nexport async function getProviders() {\n const urlString = util.format(\n queryAllProvidersURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath()\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Find all providers matching the filter and return the requested fields\n * @param {String} filter CREST filter string, eg \"entityId+eq+'${entityId}'\"\n * @param {String} fields Comma-delimited list of fields to include in the response\n * @returns {Promise} a promise that resolves to an array of saml2 entities\n */\nexport async function findProviders(filter = 'true', fields = '*') {\n const urlString = util.format(\n queryProvidersByEntityIdURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n encodeURIComponent(filter),\n fields\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Geta SAML2 entity provider by location and id\n * @param {String} location Entity provider location (hosted or remote)\n * @param {String} entityId64 Base64-encoded provider entity id\n * @returns {Promise} a promise that resolves to a saml2 entity provider object\n */\nexport async function getProviderByLocationAndId(location, entityId64) {\n const urlString = util.format(\n providerByLocationAndIdURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n location,\n entityId64\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get SAML2 entity provider by entity id\n * @param {String} entityId Provider entity id\n * @returns {Promise} a promise that resolves to a saml2 entity provider object or null\n */\nexport async function getProvider(entityId) {\n const response = await findProviders(`entityId eq '${entityId}'`, 'location');\n switch (response.data.resultCount) {\n case 0:\n throw new Error(`No provider with entity id '${entityId}' found`);\n case 1: {\n const { location } = response.data.result[0];\n const id = response.data.result[0]._id;\n return getProviderByLocationAndId(location, id);\n }\n default:\n throw new Error(`Multiple providers with entity id '${entityId}' found`);\n }\n}\n\n/**\n * Get a SAML2 entity provider's metadata URL by entity id\n * @param {String} entityId SAML2 entity id\n * @returns {String} the URL to get the metadata from\n */\nexport function getProviderMetadataUrl(entityId) {\n return util.format(\n metadataByEntityIdURLTemplate,\n storage.session.getTenant(),\n encodeURIComponent(entityId),\n storage.session.getRealm()\n );\n}\n\n/**\n * Get a SAML2 entity provider's metadata by entity id\n * @param {String} entityId SAML2 entity id\n * @returns {Promise} a promise that resolves to an object containing a SAML2 metadata\n */\nexport async function getProviderMetadata(entityId) {\n return generateAmApi(getApiConfig()).get(getProviderMetadataUrl(entityId), {\n withCredentials: true,\n });\n}\n\n/**\n * Create a SAML2 entity provider\n * @param {String} location 'hosted' or 'remote'\n * @param {Object} providerData Object representing a SAML entity provider\n * @param {String} metaData Base64-encoded metadata XML. Only required for remote providers\n * @returns {Promise} a promise that resolves to a saml2 entity provider object\n */\nexport async function createProvider(location, providerData, metaData) {\n let postData = _.cloneDeep(providerData);\n let urlString = util.format(\n createHostedProviderURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath()\n );\n\n if (location === 'remote') {\n /**\n * Remote entity providers must be created using XML metadata\n */\n urlString = util.format(\n createRemoteProviderURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath()\n );\n postData = {\n standardMetadata: metaData,\n };\n }\n\n return generateAmApi(getApiConfig()).post(urlString, postData, {\n withCredentials: true,\n });\n}\n\n/**\n * Update SAML2 entity provider\n * @param {String} location Entity provider location (hosted or remote)\n * @param {Object} providerData Object representing a SAML entity provider\n * @returns {Promise} a promise that resolves to a saml2 entity provider object\n */\nexport async function updateProvider(location, providerData) {\n const urlString = util.format(\n providerByLocationAndIdURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n location,\n providerData._id\n );\n return generateAmApi(getApiConfig()).put(urlString, providerData, {\n withCredentials: true,\n });\n}\n"]}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Get all scripts
3
+ * @returns {Promise} a promise that resolves to an object containing an array of script objects
4
+ */
5
+ export declare function getScripts(): Promise<import("axios").AxiosResponse<any, any>>;
6
+ /**
7
+ * Get script by name
8
+ * @param {String} name script name
9
+ * @returns {Promise} a promise that resolves to an object containing a script object
10
+ */
11
+ export declare function getScriptByName(name: any): Promise<import("axios").AxiosResponse<any, any>>;
12
+ /**
13
+ * Get script by id
14
+ * @param {String} id script uuid/name
15
+ * @returns {Promise} a promise that resolves to an object containing a script object
16
+ */
17
+ export declare function getScript(id: any): Promise<import("axios").AxiosResponse<any, any>>;
18
+ /**
19
+ * Put script
20
+ * @param {String} id script uuid
21
+ * @param {Object} data script object
22
+ * @returns {Promise} a promise that resolves to an object containing a script object
23
+ */
24
+ export declare function putScript(id: any, data: any): Promise<import("axios").AxiosResponse<any, any>>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/ScriptApi.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,wBAAsB,UAAU,qDAS/B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,KAAA,oDAUzC;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,EAAE,KAAA,oDAUjC;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,EAAE,KAAA,EAAE,IAAI,KAAA,oDAUvC","file":"ScriptApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateAmApi } from './BaseApi';\nimport { getCurrentRealmPath } from './utils/ApiUtils';\nimport storage from '../storage/SessionStorage';\n\nconst scriptURLTemplate = '%s/json%s/scripts/%s';\nconst scriptListURLTemplate = '%s/json%s/scripts?_queryFilter=true';\nconst scriptQueryURLTemplate =\n '%s/json%s/scripts?_queryFilter=name+eq+%%22%s%%22';\nconst apiVersion = 'protocol=2.0,resource=1.0';\nconst getApiConfig = () => {\n const configPath = getCurrentRealmPath();\n return {\n path: `${configPath}/authentication/authenticationtrees`,\n apiVersion,\n };\n};\n\n/**\n * Get all scripts\n * @returns {Promise} a promise that resolves to an object containing an array of script objects\n */\nexport async function getScripts() {\n const urlString = util.format(\n scriptListURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath()\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get script by name\n * @param {String} name script name\n * @returns {Promise} a promise that resolves to an object containing a script object\n */\nexport async function getScriptByName(name) {\n const urlString = util.format(\n scriptQueryURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n name\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get script by id\n * @param {String} id script uuid/name\n * @returns {Promise} a promise that resolves to an object containing a script object\n */\nexport async function getScript(id) {\n const urlString = util.format(\n scriptURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n id\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Put script\n * @param {String} id script uuid\n * @param {Object} data script object\n * @returns {Promise} a promise that resolves to an object containing a script object\n */\nexport async function putScript(id, data) {\n const urlString = util.format(\n scriptURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n id\n );\n return generateAmApi(getApiConfig()).put(urlString, data, {\n withCredentials: true,\n });\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export declare function getSecrets(): Promise<import("axios").AxiosResponse<any, any>>;
2
+ export declare function getSecret(id: any): Promise<import("axios").AxiosResponse<any, any>>;
3
+ export declare function putSecret(id: any, value: any, description: any, encoding?: string, useInPlaceholders?: boolean): Promise<import("axios").AxiosResponse<any, any>>;
4
+ export declare function setSecretDescription(id: any, description: any): Promise<import("axios").AxiosResponse<any, any>>;
5
+ export declare function deleteSecret(id: any): Promise<import("axios").AxiosResponse<any, any>>;
6
+ export declare function getSecretVersions(id: any): Promise<import("axios").AxiosResponse<any, any>>;
7
+ export declare function createNewVersionOfSecret(id: any, value: any): Promise<import("axios").AxiosResponse<any, any>>;
8
+ export declare function getVersionOfSecret(id: any, version: any): Promise<import("axios").AxiosResponse<any, any>>;
9
+ export declare function setStatusOfVersionOfSecret(id: any, version: any, status: any): Promise<import("axios").AxiosResponse<any, any>>;
10
+ export declare function deleteVersionOfSecret(id: any, version: any): Promise<import("axios").AxiosResponse<any, any>>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/SecretsApi.ts"],"names":[],"mappings":"AAoBA,wBAAsB,UAAU,qDAQ/B;AAED,wBAAsB,SAAS,CAAC,EAAE,KAAA,oDASjC;AAED,wBAAsB,SAAS,CAC7B,EAAE,KAAA,EACF,KAAK,KAAA,EACL,WAAW,KAAA,EACX,QAAQ,SAAY,EACpB,iBAAiB,UAAO,oDAkBzB;AAED,wBAAsB,oBAAoB,CAAC,EAAE,KAAA,EAAE,WAAW,KAAA,oDAWzD;AAED,wBAAsB,YAAY,CAAC,EAAE,KAAA,oDASpC;AAED,wBAAsB,iBAAiB,CAAC,EAAE,KAAA,oDASzC;AAED,wBAAsB,wBAAwB,CAAC,EAAE,KAAA,EAAE,KAAK,KAAA,oDAWvD;AAED,wBAAsB,kBAAkB,CAAC,EAAE,KAAA,EAAE,OAAO,KAAA,oDAUnD;AAED,wBAAsB,0BAA0B,CAAC,EAAE,KAAA,EAAE,OAAO,KAAA,EAAE,MAAM,KAAA,oDAYnE;AAED,wBAAsB,qBAAqB,CAAC,EAAE,KAAA,EAAE,OAAO,KAAA,oDAUtD","file":"SecretsApi.d.ts","sourcesContent":["import util from 'util';\nimport { encode } from './utils/Base64';\nimport { getTenantURL } from './utils/ApiUtils';\nimport { generateESVApi } from './BaseApi';\nimport storage from '../storage/SessionStorage';\n\nconst secretsListURLTemplate = '%s/environment/secrets';\nconst secretListVersionsURLTemplate = '%s/environment/secrets/%s/versions';\nconst secretCreateNewVersionURLTemplate = `${secretListVersionsURLTemplate}?_action=create`;\nconst secretGetVersionURLTemplate = `${secretListVersionsURLTemplate}/%s`;\nconst secretVersionStatusURLTemplate = `${secretGetVersionURLTemplate}?_action=changestatus`;\nconst secretURLTemplate = '%s/environment/secrets/%s';\nconst secretSetDescriptionURLTemplate = `${secretURLTemplate}?_action=setDescription`;\n\nconst apiVersion = 'protocol=1.0,resource=1.0';\nconst getApiConfig = () => ({\n path: `/environment/secrets`,\n apiVersion,\n});\n\nexport async function getSecrets() {\n const urlString = util.format(\n secretsListURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\nexport async function getSecret(id) {\n const urlString = util.format(\n secretURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\nexport async function putSecret(\n id,\n value,\n description,\n encoding = 'generic',\n useInPlaceholders = true\n) {\n if (encoding !== 'generic')\n throw new Error(`Unsupported encoding: ${encoding}`);\n const data = {\n valueBase64: encode(value),\n description,\n encoding,\n useInPlaceholders,\n };\n const urlString = util.format(\n secretURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).put(urlString, data, {\n withCredentials: true,\n });\n}\n\nexport async function setSecretDescription(id, description) {\n const urlString = util.format(\n secretSetDescriptionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).post(\n urlString,\n { description },\n { withCredentials: true }\n );\n}\n\nexport async function deleteSecret(id) {\n const urlString = util.format(\n secretURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).delete(urlString, {\n withCredentials: true,\n });\n}\n\nexport async function getSecretVersions(id) {\n const urlString = util.format(\n secretListVersionsURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\nexport async function createNewVersionOfSecret(id, value) {\n const urlString = util.format(\n secretCreateNewVersionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).post(\n urlString,\n { valueBase64: encode(value) },\n { withCredentials: true }\n );\n}\n\nexport async function getVersionOfSecret(id, version) {\n const urlString = util.format(\n secretGetVersionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id,\n version\n );\n return generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\nexport async function setStatusOfVersionOfSecret(id, version, status) {\n const urlString = util.format(\n secretVersionStatusURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id,\n version\n );\n return generateESVApi(getApiConfig()).post(\n urlString,\n { status },\n { withCredentials: true }\n );\n}\n\nexport async function deleteVersionOfSecret(id, version) {\n const urlString = util.format(\n secretGetVersionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id,\n version\n );\n return generateESVApi(getApiConfig()).delete(urlString, {\n withCredentials: true,\n });\n}\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Get server info
3
+ * @returns {Promise} a promise that resolves to an object containing a server info object
4
+ */
5
+ export declare function getServerInfo(): Promise<import("axios").AxiosResponse<any, any>>;
6
+ /**
7
+ * Get server version info
8
+ * @returns {Promise} a promise that resolves to an object containing a server version info object
9
+ */
10
+ export declare function getServerVersionInfo(): Promise<import("axios").AxiosResponse<any, any>>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/ServerInfoApi.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAsB,aAAa,qDAOlC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,qDAOzC","file":"ServerInfoApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateAmApi } from './BaseApi';\nimport storage from '../storage/SessionStorage';\n\nconst serverInfoUrlTemplate = '%s/json/serverinfo/%s';\n\nconst serverInfoApiVersion = 'resource=1.1';\nconst getServerInfoApiConfig = () => ({\n apiVersion: serverInfoApiVersion,\n});\n\nconst serverVersionoApiVersion = 'resource=1.0';\nconst getServerVersionApiConfig = () => ({\n apiVersion: serverVersionoApiVersion,\n});\n\n/**\n * Get server info\n * @returns {Promise} a promise that resolves to an object containing a server info object\n */\nexport async function getServerInfo() {\n const urlString = util.format(\n serverInfoUrlTemplate,\n storage.session.getTenant(),\n '*'\n );\n return generateAmApi(getServerInfoApiConfig()).get(urlString, {});\n}\n\n/**\n * Get server version info\n * @returns {Promise} a promise that resolves to an object containing a server version info object\n */\nexport async function getServerVersionInfo() {\n const urlString = util.format(\n serverInfoUrlTemplate,\n storage.session.getTenant(),\n 'version'\n );\n return generateAmApi(getServerVersionApiConfig()).get(urlString, {});\n}\n"]}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Get social identity provider types
3
+ * @returns {Promise} a promise that resolves to an object containing an array of social identity provider types
4
+ */
5
+ export declare function getSocialIdentityProviderTypes(): Promise<import("axios").AxiosResponse<any, any>>;
6
+ /**
7
+ * Get social identity providers by type
8
+ * @param {String} type social identity provider type
9
+ * @returns {Promise} a promise that resolves to an object containing an array of social identity providers of the requested type
10
+ */
11
+ export declare function getSocialIdentityProvidersByType(type: any): Promise<import("axios").AxiosResponse<any, any>>;
12
+ /**
13
+ * Get all social identity providers
14
+ * @returns {Promise} a promise that resolves to an object containing an array of social identity providers
15
+ */
16
+ export declare function getSocialIdentityProviders(): Promise<import("axios").AxiosResponse<any, any>>;
17
+ /**
18
+ * Get social identity provider by type and id
19
+ * @param {*} type social identity provider type
20
+ * @param {*} id social identity provider id/name
21
+ * @returns {Promise} a promise that resolves to an object containing a social identity provider
22
+ */
23
+ export declare function getProviderByTypeAndId(type: any, id: any): Promise<import("axios").AxiosResponse<any, any>>;
24
+ /**
25
+ * Get social identity provider by type and id
26
+ * @param {String} type social identity provider type
27
+ * @param {String} id social identity provider id/name
28
+ * @param {Object} data a social identity provider object
29
+ * @returns {Promise} a promise that resolves to an object containing a social identity provider
30
+ */
31
+ export declare function putProviderByTypeAndId(type: any, id: any, data: any): Promise<import("axios").AxiosResponse<any, any>>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/SocialIdentityProvidersApi.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAsB,8BAA8B,qDASnD;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,IAAI,KAAA,oDAU1D;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,qDAa/C;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,KAAA,EAAE,EAAE,KAAA,oDAWpD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,KAAA,EAAE,EAAE,KAAA,EAAE,IAAI,KAAA,oDAc1D","file":"SocialIdentityProvidersApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateAmApi } from './BaseApi';\nimport { deleteDeepByKey, getCurrentRealmPath } from './utils/ApiUtils';\nimport storage from '../storage/SessionStorage';\n\nconst getAllProviderTypesURLTemplate =\n '%s/json%s/realm-config/services/SocialIdentityProviders?_action=getAllTypes';\nconst providerByTypeAndIdURLTemplate =\n '%s/json%s/realm-config/services/SocialIdentityProviders/%s/%s';\nconst getAllProvidersURLTemplate =\n '%s/json%s/realm-config/services/SocialIdentityProviders?_action=nextdescendents';\nconst getProvidersByTypeURLTemplate =\n '%s/json%s/realm-config/services/SocialIdentityProviders/%s?_queryFilter=true';\nconst apiVersion = 'protocol=2.1,resource=1.0';\nconst getApiConfig = () => {\n const configPath = getCurrentRealmPath();\n return {\n path: `${configPath}/realm-config/services/SocialIdentityProviders`,\n apiVersion,\n };\n};\n\n/**\n * Get social identity provider types\n * @returns {Promise} a promise that resolves to an object containing an array of social identity provider types\n */\nexport async function getSocialIdentityProviderTypes() {\n const urlString = util.format(\n getAllProviderTypesURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath()\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get social identity providers by type\n * @param {String} type social identity provider type\n * @returns {Promise} a promise that resolves to an object containing an array of social identity providers of the requested type\n */\nexport async function getSocialIdentityProvidersByType(type) {\n const urlString = util.format(\n getProvidersByTypeURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n type\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get all social identity providers\n * @returns {Promise} a promise that resolves to an object containing an array of social identity providers\n */\nexport async function getSocialIdentityProviders() {\n const urlString = util.format(\n getAllProvidersURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath()\n );\n return generateAmApi(getApiConfig()).post(\n urlString,\n {},\n {\n withCredentials: true,\n }\n );\n}\n\n/**\n * Get social identity provider by type and id\n * @param {*} type social identity provider type\n * @param {*} id social identity provider id/name\n * @returns {Promise} a promise that resolves to an object containing a social identity provider\n */\nexport async function getProviderByTypeAndId(type, id) {\n const urlString = util.format(\n providerByTypeAndIdURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n type,\n id\n );\n return generateAmApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get social identity provider by type and id\n * @param {String} type social identity provider type\n * @param {String} id social identity provider id/name\n * @param {Object} data a social identity provider object\n * @returns {Promise} a promise that resolves to an object containing a social identity provider\n */\nexport async function putProviderByTypeAndId(type, id, data) {\n // until we figure out a way to use transport keys in Frodo,\n // we'll have to drop those encrypted attributes.\n const providerData = deleteDeepByKey(data, '-encrypted');\n const urlString = util.format(\n providerByTypeAndIdURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n type,\n id\n );\n return generateAmApi(getApiConfig()).put(urlString, providerData, {\n withCredentials: true,\n });\n}\n"]}
@@ -0,0 +1,14 @@
1
+ export declare enum RestartStatus {
2
+ restarting = "restarting",
3
+ ready = "ready"
4
+ }
5
+ /**
6
+ * Get status
7
+ * @returns {Promise<RestartStatus>} a promise that resolves to a string indicating status
8
+ */
9
+ export declare function getStatus(): Promise<RestartStatus>;
10
+ /**
11
+ * Initiate restart
12
+ * @returns {Promise<string>} a promise that resolves to a string indicating status
13
+ */
14
+ export declare function initiateRestart(): Promise<RestartStatus>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/StartupApi.ts"],"names":[],"mappings":"AAcA,oBAAY,aAAa;IACvB,UAAU,eAAe;IACzB,KAAK,UAAU;CAChB;AAED;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CASxD;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,CAiB9D","file":"StartupApi.d.ts","sourcesContent":["import util from 'util';\nimport { getTenantURL } from './utils/ApiUtils';\nimport { generateESVApi } from './BaseApi';\nimport storage from '../storage/SessionStorage';\n\nconst startupURLTemplate = '%s/environment/startup';\nconst startupInitiateRestartURLTemplate = `${startupURLTemplate}?_action=restart`;\n\nconst apiVersion = 'protocol=1.0,resource=1.0';\nconst getApiConfig = () => ({\n path: `/environment/startup`,\n apiVersion,\n});\n\nexport enum RestartStatus {\n restarting = 'restarting',\n ready = 'ready',\n}\n\n/**\n * Get status\n * @returns {Promise<RestartStatus>} a promise that resolves to a string indicating status\n */\nexport async function getStatus(): Promise<RestartStatus> {\n const urlString = util.format(\n startupURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n const { data } = await generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n return data.restartStatus;\n}\n\n/**\n * Initiate restart\n * @returns {Promise<string>} a promise that resolves to a string indicating status\n */\nexport async function initiateRestart(): Promise<RestartStatus> {\n const restartStatus = await getStatus();\n if (restartStatus === RestartStatus.ready) {\n const urlString = util.format(\n startupInitiateRestartURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n const { data } = await generateESVApi(getApiConfig()).post(\n urlString,\n null,\n {\n withCredentials: true,\n }\n );\n return data.restartStatus;\n }\n throw new Error(`Not ready! Current status: ${restartStatus}`);\n}\n"]}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Get all themes
3
+ * @returns {Promise} a promise that resolves to an array of themes
4
+ */
5
+ export declare function getThemes(): Promise<any>;
6
+ /**
7
+ * Get theme by id
8
+ * @param {String} id theme id
9
+ * @returns {Promise} a promise that resolves to an array of themes
10
+ */
11
+ export declare function getTheme(id: any): Promise<any>;
12
+ /**
13
+ * Get theme by name
14
+ * @param {String} name theme name
15
+ * @returns {Promise} a promise that resolves to an array of themes
16
+ */
17
+ export declare function getThemeByName(name: any): Promise<any>;
18
+ /**
19
+ * Put theme by id
20
+ * @param {String} id theme id
21
+ * @param {Object} data theme object
22
+ * @returns {Promise} a promise that resolves to an object containing a themes object
23
+ */
24
+ export declare function putTheme(id: any, data: any): Promise<import("axios").AxiosResponse<any, any>>;
25
+ /**
26
+ * Put theme by name
27
+ * @param {String} name theme name
28
+ * @param {Object} data theme object
29
+ * @returns {Promise} a promise that resolves to an object containing a themes object
30
+ */
31
+ export declare function putThemeByName(name: any, data: any): Promise<import("axios").AxiosResponse<any, any>>;
32
+ /**
33
+ * Put all themes
34
+ * @param {Object} data themes object containing all themes for all realms
35
+ * @returns {Promise} a promise that resolves to an object containing a themes object
36
+ */
37
+ export declare function putThemes(data: any): Promise<import("axios").AxiosResponse<any, any>>;
38
+ /**
39
+ * Delete theme by id
40
+ * @param {String} id theme id
41
+ * @returns {Promise} a promise that resolves to an object containing a themes object
42
+ */
43
+ export declare function deleteTheme(id: any): Promise<import("axios").AxiosResponse<any, any>>;
44
+ /**
45
+ * Delete theme by name
46
+ * @param {String} name theme name
47
+ * @returns {Promise} a promise that resolves to an object containing a themes object
48
+ */
49
+ export declare function deleteThemeByName(name: any): Promise<import("axios").AxiosResponse<any, any>>;
50
+ /**
51
+ * Delete all themes
52
+ * @returns {Promise} a promise that resolves to an array of themes
53
+ */
54
+ export declare function deleteThemes(): Promise<import("axios").AxiosResponse<any, any>>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/ThemeApi.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAsB,SAAS,iBAI9B;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,EAAE,KAAA,gBAGhC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,KAAA,gBAGxC;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,EAAE,KAAA,EAAE,IAAI,KAAA,oDAmBtC;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,KAAA,EAAE,IAAI,KAAA,oDAmB9C;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,KAAA,oDAmCnC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,EAAE,KAAA,oDAQnC;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,KAAA,oDAQ3C;AAED;;;GAGG;AACH,wBAAsB,YAAY,qDAIjC","file":"ThemeApi.d.ts","sourcesContent":["import { getConfigEntity, putConfigEntity } from './IdmConfigApi';\nimport { getCurrentRealmName } from './utils/ApiUtils';\n\nconst THEMEREALM_ID = 'ui/themerealm';\n\n/**\n * Get realm themes\n * @param {Object} themes object containing themes\n * @returns {Object} array of theme pertaining to the current realm\n */\nfunction getRealmThemes(themes) {\n return themes.realm[getCurrentRealmName()]\n ? themes.realm[getCurrentRealmName()]\n : [];\n}\n\n/**\n * Get all themes\n * @returns {Promise} a promise that resolves to an array of themes\n */\nexport async function getThemes() {\n return getConfigEntity(THEMEREALM_ID).then((response) =>\n getRealmThemes(response.data)\n );\n}\n\n/**\n * Get theme by id\n * @param {String} id theme id\n * @returns {Promise} a promise that resolves to an array of themes\n */\nexport async function getTheme(id) {\n const themes = (await getConfigEntity(THEMEREALM_ID)).data;\n return getRealmThemes(themes).filter((theme) => theme._id === id);\n}\n\n/**\n * Get theme by name\n * @param {String} name theme name\n * @returns {Promise} a promise that resolves to an array of themes\n */\nexport async function getThemeByName(name) {\n const themes = (await getConfigEntity(THEMEREALM_ID)).data;\n return getRealmThemes(themes).filter((theme) => theme.name === name);\n}\n\n/**\n * Put theme by id\n * @param {String} id theme id\n * @param {Object} data theme object\n * @returns {Promise} a promise that resolves to an object containing a themes object\n */\nexport async function putTheme(id, data) {\n const themeData = data;\n themeData._id = id;\n const themes = (await getConfigEntity(THEMEREALM_ID)).data;\n let isNew = true;\n const realmThemes = getRealmThemes(themes).map((theme) => {\n if (theme._id === id) {\n isNew = false;\n return themeData;\n }\n // eslint-disable-next-line no-param-reassign\n if (themeData.isDefault) theme.isDefault = false;\n return theme;\n });\n if (isNew) {\n realmThemes.push(themeData);\n }\n themes.realm[getCurrentRealmName()] = realmThemes;\n return putConfigEntity(THEMEREALM_ID, themes);\n}\n\n/**\n * Put theme by name\n * @param {String} name theme name\n * @param {Object} data theme object\n * @returns {Promise} a promise that resolves to an object containing a themes object\n */\nexport async function putThemeByName(name, data) {\n const themeData = data;\n themeData.name = name;\n const themes = await getConfigEntity(THEMEREALM_ID);\n let isNew = true;\n const realmThemes = getRealmThemes(themes).map((theme) => {\n if (theme.name === name) {\n isNew = false;\n return themeData;\n }\n // eslint-disable-next-line no-param-reassign\n if (themeData.isDefault) theme.isDefault = false;\n return theme;\n });\n if (isNew) {\n realmThemes.push(themeData);\n }\n themes['realm'][getCurrentRealmName()] = realmThemes;\n return putConfigEntity(THEMEREALM_ID, themes);\n}\n\n/**\n * Put all themes\n * @param {Object} data themes object containing all themes for all realms\n * @returns {Promise} a promise that resolves to an object containing a themes object\n */\nexport async function putThemes(data) {\n const allThemesData = data;\n const themes = (await getConfigEntity(THEMEREALM_ID)).data;\n const allThemeIDs = Object.keys(allThemesData);\n const existingThemeIDs = [];\n let defaultThemeId = null;\n // update existing themes\n let realmThemes = getRealmThemes(themes).map((theme) => {\n if (allThemesData[theme._id]) {\n existingThemeIDs.push(theme._id);\n // remember the id of the last default theme\n if (allThemesData[theme._id].isDefault) defaultThemeId = theme._id;\n return allThemesData[theme._id];\n }\n return theme;\n });\n const newThemeIDs = allThemeIDs.filter(\n (id) => !existingThemeIDs.includes(id)\n );\n // add new themes\n newThemeIDs.forEach((themeId) => {\n // remember the id of the last default theme\n if (allThemesData[themeId].isDefault) defaultThemeId = themeId;\n realmThemes.push(allThemesData[themeId]);\n });\n // if we imported a default theme, flag all the other themes as not default\n if (defaultThemeId) {\n realmThemes = realmThemes.map((theme) => {\n // eslint-disable-next-line no-param-reassign\n theme.isDefault = theme._id === defaultThemeId;\n return theme;\n });\n }\n themes.realm[getCurrentRealmName()] = realmThemes;\n return putConfigEntity(THEMEREALM_ID, themes);\n}\n\n/**\n * Delete theme by id\n * @param {String} id theme id\n * @returns {Promise} a promise that resolves to an object containing a themes object\n */\nexport async function deleteTheme(id) {\n const themes = (await getConfigEntity(THEMEREALM_ID)).data;\n const realmThemes = getRealmThemes(themes);\n const finalThemes = realmThemes.filter((theme) => theme._id !== id);\n if (realmThemes.length === finalThemes.length)\n throw new Error(`${id} not found`);\n themes.realm[getCurrentRealmName()] = realmThemes;\n return putConfigEntity(THEMEREALM_ID, themes);\n}\n\n/**\n * Delete theme by name\n * @param {String} name theme name\n * @returns {Promise} a promise that resolves to an object containing a themes object\n */\nexport async function deleteThemeByName(name) {\n const themes = (await getConfigEntity(THEMEREALM_ID)).data;\n const realmThemes = getRealmThemes(themes);\n const finalThemes = realmThemes.filter((theme) => theme.name !== name);\n if (realmThemes.length === finalThemes.length)\n throw new Error(`${name} not found`);\n themes.realm[getCurrentRealmName()] = finalThemes;\n return putConfigEntity(THEMEREALM_ID, themes);\n}\n\n/**\n * Delete all themes\n * @returns {Promise} a promise that resolves to an array of themes\n */\nexport async function deleteThemes() {\n const themes = (await getConfigEntity(THEMEREALM_ID)).data;\n themes.realm[getCurrentRealmName()] = [];\n return putConfigEntity(THEMEREALM_ID, themes);\n}\n"]}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Get all trees
3
+ * @returns {Promise} a promise that resolves to an array of tree objects
4
+ */
5
+ export declare function getTrees(): Promise<any>;
6
+ /**
7
+ * Get tree by id/name
8
+ * @param {String} id tree id/name
9
+ * @returns {Promise} a promise that resolves to a tree object
10
+ */
11
+ export declare function getTree(id: any): Promise<any>;
12
+ /**
13
+ * Put tree by id/name
14
+ * @param {String} treeId tree id/name
15
+ * @param {Object} treeData tree object
16
+ * @returns {Promise} a promise that resolves to a tree object
17
+ */
18
+ export declare function putTree(treeId: string, treeData: any): Promise<any>;
19
+ /**
20
+ * Delete tree by id/name
21
+ * @param {String} treeId tree id/name
22
+ * @returns {Promise} a promise that resolves to a tree object
23
+ */
24
+ export declare function deleteTree(treeId: any): Promise<any>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/TreeApi.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAsB,QAAQ,iBAU7B;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,EAAE,KAAA,gBAW/B;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,KAAA,gBAerD;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,MAAM,KAAA,gBAWtC","file":"TreeApi.d.ts","sourcesContent":["import util from 'util';\nimport { getCurrentRealmPath } from './utils/ApiUtils';\nimport { generateAmApi } from './BaseApi';\nimport storage from '../storage/SessionStorage';\n\nconst treeByIdURLTemplate =\n '%s/json%s/realm-config/authentication/authenticationtrees/trees/%s';\nconst queryAllTreesURLTemplate =\n '%s/json%s/realm-config/authentication/authenticationtrees/trees?_queryFilter=true';\n\nconst apiVersion = 'protocol=2.1,resource=1.0';\nconst getTreeApiConfig = () => {\n const configPath = getCurrentRealmPath();\n return {\n path: `${configPath}/authentication/authenticationtrees`,\n apiVersion,\n };\n};\n\n/**\n * Get all trees\n * @returns {Promise} a promise that resolves to an array of tree objects\n */\nexport async function getTrees() {\n const urlString = util.format(\n queryAllTreesURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath()\n );\n const response = await generateAmApi(getTreeApiConfig()).get(urlString, {\n withCredentials: true,\n });\n return response.data.result;\n}\n\n/**\n * Get tree by id/name\n * @param {String} id tree id/name\n * @returns {Promise} a promise that resolves to a tree object\n */\nexport async function getTree(id) {\n const urlString = util.format(\n treeByIdURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n id\n );\n const { data } = await generateAmApi(getTreeApiConfig()).get(urlString, {\n withCredentials: true,\n });\n return data;\n}\n\n/**\n * Put tree by id/name\n * @param {String} treeId tree id/name\n * @param {Object} treeData tree object\n * @returns {Promise} a promise that resolves to a tree object\n */\nexport async function putTree(treeId: string, treeData) {\n const urlString = util.format(\n treeByIdURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n treeId\n );\n const { data } = await generateAmApi(getTreeApiConfig()).put(\n urlString,\n treeData,\n {\n withCredentials: true,\n }\n );\n return data;\n}\n\n/**\n * Delete tree by id/name\n * @param {String} treeId tree id/name\n * @returns {Promise} a promise that resolves to a tree object\n */\nexport async function deleteTree(treeId) {\n const urlString = util.format(\n treeByIdURLTemplate,\n storage.session.getTenant(),\n getCurrentRealmPath(),\n treeId\n );\n const { data } = await generateAmApi(getTreeApiConfig()).delete(urlString, {\n withCredentials: true,\n });\n return data;\n}\n"]}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Get all variables
3
+ * @returns {Promise} a promise that resolves to an object containing an array of variable objects
4
+ */
5
+ export declare function getVariables(): Promise<import("axios").AxiosResponse<any, any>>;
6
+ /**
7
+ * Get variable by id/name
8
+ * @param {String} id variable id/name
9
+ * @returns {Promise} a promise that resolves to an object containing a variable object
10
+ */
11
+ export declare function getVariable(id: any): Promise<import("axios").AxiosResponse<any, any>>;
12
+ /**
13
+ * Put variable by id/name
14
+ * @param {String} id variable id/name
15
+ * @param {String} value variable value
16
+ * @param {String} description variable description
17
+ * @returns {Promise} a promise that resolves to an object containing a variable object
18
+ */
19
+ export declare function putVariable(id: any, value: any, description: any): Promise<import("axios").AxiosResponse<any, any>>;
20
+ /**
21
+ * Set variable description
22
+ * @param {*} id variable id/name
23
+ * @param {*} description variable description
24
+ * @returns {Promise} a promise that resolves to an object containing a status object
25
+ */
26
+ export declare function setVariableDescription(id: any, description: any): Promise<import("axios").AxiosResponse<any, any>>;
27
+ /**
28
+ * Delete variable by id/name
29
+ * @param {String} id variable id/name
30
+ * @returns {Promise} a promise that resolves to an object containing a variable object
31
+ */
32
+ export declare function deleteVariable(id: any): Promise<import("axios").AxiosResponse<any, any>>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/VariablesApi.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAsB,YAAY,qDAQjC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,EAAE,KAAA,oDASnC;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,EAAE,KAAA,EAAE,KAAK,KAAA,EAAE,WAAW,KAAA,oDAYvD;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,KAAA,EAAE,WAAW,KAAA,oDAW3D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,EAAE,KAAA,oDAStC","file":"VariablesApi.d.ts","sourcesContent":["import util from 'util';\nimport { encode } from './utils/Base64';\nimport { getTenantURL, getCurrentRealmPath } from './utils/ApiUtils';\nimport { generateESVApi } from './BaseApi';\nimport storage from '../storage/SessionStorage';\n\nconst variablesListURLTemplate = '%s/environment/variables';\nconst variableURLTemplate = '%s/environment/variables/%s';\nconst variableSetDescriptionURLTemplate = `${variableURLTemplate}?_action=setDescription`;\n\nconst apiVersion = 'protocol=1.0,resource=1.0';\nconst getApiConfig = () => {\n const configPath = getCurrentRealmPath();\n return {\n path: `${configPath}/environment/secrets`,\n apiVersion,\n };\n};\n\n/**\n * Get all variables\n * @returns {Promise} a promise that resolves to an object containing an array of variable objects\n */\nexport async function getVariables() {\n const urlString = util.format(\n variablesListURLTemplate,\n getTenantURL(storage.session.getTenant())\n );\n return generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Get variable by id/name\n * @param {String} id variable id/name\n * @returns {Promise} a promise that resolves to an object containing a variable object\n */\nexport async function getVariable(id) {\n const urlString = util.format(\n variableURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).get(urlString, {\n withCredentials: true,\n });\n}\n\n/**\n * Put variable by id/name\n * @param {String} id variable id/name\n * @param {String} value variable value\n * @param {String} description variable description\n * @returns {Promise} a promise that resolves to an object containing a variable object\n */\nexport async function putVariable(id, value, description) {\n const data = {};\n if (value) data['valueBase64'] = encode(value);\n if (description) data['description'] = description;\n const urlString = util.format(\n variableURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).put(urlString, data, {\n withCredentials: true,\n });\n}\n\n/**\n * Set variable description\n * @param {*} id variable id/name\n * @param {*} description variable description\n * @returns {Promise} a promise that resolves to an object containing a status object\n */\nexport async function setVariableDescription(id, description) {\n const urlString = util.format(\n variableSetDescriptionURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).post(\n urlString,\n { description },\n { withCredentials: true }\n );\n}\n\n/**\n * Delete variable by id/name\n * @param {String} id variable id/name\n * @returns {Promise} a promise that resolves to an object containing a variable object\n */\nexport async function deleteVariable(id) {\n const urlString = util.format(\n variableURLTemplate,\n getTenantURL(storage.session.getTenant()),\n id\n );\n return generateESVApi(getApiConfig()).delete(urlString, {\n withCredentials: true,\n });\n}\n"]}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Get current realm path
3
+ * @returns {String} a CREST-compliant realm path, e.g. /realms/root/realms/alpha
4
+ */
5
+ export declare function getCurrentRealmPath(): string;
6
+ /**
7
+ * Get current realm name
8
+ * @returns {String} name of the current realm. /alpha -> alpha
9
+ */
10
+ export declare function getCurrentRealmName(): string;
11
+ /**
12
+ * Get current realm name
13
+ * @param {String} realm realm
14
+ * @returns {String} name of the realm. /alpha -> alpha
15
+ */
16
+ export declare function getRealmName(realm: any): string;
17
+ /**
18
+ * Get tenant base URL
19
+ * @param {String} tenant tenant URL with path and query params
20
+ * @returns {String} tenant base URL without path and query params
21
+ */
22
+ export declare function getTenantURL(tenant: any): string;
23
+ /**
24
+ * Deep delete keys and their values from an input object. If a key in object contains substring, the key an its value is deleted.
25
+ * @param {Object} object input object that needs keys removed
26
+ * @param {String} substring substring to search for in key
27
+ * @returns the modified object without the matching keys and their values
28
+ */
29
+ export declare function deleteDeepByKey(object: any, substring: any): any;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/utils/ApiUtils.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,mBAAmB,WAUlC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,WAQlC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,KAAA,UAOjC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,KAAA,UAGlC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,KAAA,EAAE,SAAS,KAAA,OAWhD","file":"ApiUtils.d.ts","sourcesContent":["import util from 'util';\nimport storage from '../../storage/SessionStorage';\n\nconst realmPathTemplate = '/realms/%s';\n\n/**\n * Get current realm path\n * @returns {String} a CREST-compliant realm path, e.g. /realms/root/realms/alpha\n */\nexport function getCurrentRealmPath() {\n let realm = storage.session.getRealm();\n if (realm.startsWith('/') && realm.length > 1) {\n realm = realm.substring(1);\n }\n let realmPath = util.format(realmPathTemplate, 'root');\n if (realm !== '/') {\n realmPath += util.format(realmPathTemplate, realm);\n }\n return realmPath;\n}\n\n/**\n * Get current realm name\n * @returns {String} name of the current realm. /alpha -> alpha\n */\nexport function getCurrentRealmName() {\n const realm = storage.session.getRealm();\n const components = realm.split('/');\n let realmName = '/';\n if (components.length > 0 && realmName !== realm) {\n realmName = components[components.length - 1];\n }\n return realmName;\n}\n\n/**\n * Get current realm name\n * @param {String} realm realm\n * @returns {String} name of the realm. /alpha -> alpha\n */\nexport function getRealmName(realm) {\n const components = realm.split('/');\n let realmName = '/';\n if (components.length > 0 && realmName !== realm) {\n realmName = components[components.length - 1];\n }\n return realmName;\n}\n\n/**\n * Get tenant base URL\n * @param {String} tenant tenant URL with path and query params\n * @returns {String} tenant base URL without path and query params\n */\nexport function getTenantURL(tenant) {\n const parsedUrl = new URL(tenant);\n return `${parsedUrl.protocol}//${parsedUrl.host}`;\n}\n\n/**\n * Deep delete keys and their values from an input object. If a key in object contains substring, the key an its value is deleted.\n * @param {Object} object input object that needs keys removed\n * @param {String} substring substring to search for in key\n * @returns the modified object without the matching keys and their values\n */\nexport function deleteDeepByKey(object, substring) {\n const obj = object;\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key.indexOf(substring) > 0) {\n delete obj[key];\n } else if (Object(obj[key]) === obj[key]) {\n obj[key] = deleteDeepByKey(obj[key], substring);\n }\n }\n return obj;\n}\n"]}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Is input Base64-encoded
3
+ * @param {String} input
4
+ * @returns {boolean} true if input is Base64-encoded, false otherwise
5
+ */
6
+ export declare function isBase64Encoded(input: any): boolean;
7
+ /**
8
+ * Base64-encode a string
9
+ * @param {String} input String to base64-encode
10
+ * @returns {String} Base64-encoded input string
11
+ */
12
+ export declare function encode(input: any, padding?: boolean): string;
13
+ /**
14
+ * Base64-decode a string
15
+ * @param {String} input
16
+ * @returns {String} Base64-decoded input string
17
+ */
18
+ export declare function decode(input: any): string;
19
+ /**
20
+ * Decode Base64URL
21
+ * @param {*} input the string to decode
22
+ * @returns {String} the decoded string.
23
+ */
24
+ export declare const decodeBase64Url: (input: any) => string;
25
+ /**
26
+ * Encode Base65URL
27
+ * @param {*} input the string to encode
28
+ * @returns {String} the encoded string.
29
+ */
30
+ export declare const encodeBase64Url: any;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/utils/Base64.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,KAAA,WAEpC;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,KAAA,EAAE,OAAO,UAAO,UAK3C;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,KAAA,UAI3B;AAaD;;;;GAIG;AACH,eAAO,MAAM,eAAe,wBAA+C,CAAC;AAE5E;;;;GAIG;AACH,eAAO,MAAM,eAAe,KAAM,CAAC","file":"Base64.d.ts","sourcesContent":["/**\n * Regex to determine if a string is Base64-encoded\n */\nconst base64regex =\n /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n\n/**\n * Is input Base64-encoded\n * @param {String} input\n * @returns {boolean} true if input is Base64-encoded, false otherwise\n */\nexport function isBase64Encoded(input) {\n return base64regex.test(input);\n}\n\n/**\n * Base64-encode a string\n * @param {String} input String to base64-encode\n * @returns {String} Base64-encoded input string\n */\nexport function encode(input, padding = true) {\n if (padding) {\n return Buffer.from(input).toString('base64');\n }\n return Buffer.from(input).toString('base64').replace(/=/g, '');\n}\n\n/**\n * Base64-decode a string\n * @param {String} input\n * @returns {String} Base64-decoded input string\n */\nexport function decode(input) {\n // eslint-disable-next-line no-param-reassign\n if (input.length % 4 !== 0) input += '='.repeat(4 - (input.length % 4));\n return Buffer.from(input, 'base64').toString();\n}\n\nlet enc;\nif (Buffer.isEncoding('base64url')) {\n enc = (input, encoding: BufferEncoding = 'utf8') =>\n Buffer.from(input, encoding).toString('base64url');\n} else {\n const fromBase64 = (base64) =>\n base64.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n enc = (input, encoding: BufferEncoding = 'utf8') =>\n fromBase64(Buffer.from(input, encoding).toString('base64'));\n}\n\n/**\n * Decode Base64URL\n * @param {*} input the string to decode\n * @returns {String} the decoded string.\n */\nexport const decodeBase64Url = (input) => `${Buffer.from(input, 'base64')}`;\n\n/**\n * Encode Base65URL\n * @param {*} input the string to encode\n * @returns {String} the encoded string.\n */\nexport const encodeBase64Url = enc;\n"]}
@@ -0,0 +1,26 @@
1
+ export declare function getVersion(): string;
2
+ export * as NodeRaw from './api/NodeApi';
3
+ export * as TreeRaw from './api/TreeApi';
4
+ export * as StartupRaw from './api/StartupApi';
5
+ export * as Admin from './ops/AdminOps';
6
+ export * as Authenticate from './ops/AuthenticateOps';
7
+ export * as CirclesOfTrust from './ops/CirclesOfTrustOps';
8
+ export * as ConnectionProfile from './ops/ConnectionProfileOps';
9
+ export * as EmailTemplate from './ops/EmailTemplateOps';
10
+ export * as Idm from './ops/IdmOps';
11
+ export * as Idp from './ops/IdmOps';
12
+ export * as Journey from './ops/JourneyOps';
13
+ export * as Log from './ops/LogOps';
14
+ export * as ManagedObject from './ops/ManagedObjectOps';
15
+ export * as OAuth2Client from './ops/OAuth2ClientOps';
16
+ export * as Organization from './ops/OrganizationOps';
17
+ export * as Realm from './ops/RealmOps';
18
+ export * as Saml from './ops/SamlOps';
19
+ export * as Script from './ops/ScriptOps';
20
+ export * as Secrets from './ops/SecretsOps';
21
+ export * as Startup from './ops/StartupOps';
22
+ export * as Theme from './ops/ThemeOps';
23
+ export * as Variables from './ops/VariablesOps';
24
+ export * as Utils from './ops/utils/OpsUtils';
25
+ export * as state from './storage/SessionStorage';
26
+ export * as OAuth2OIDCApi from './api/OAuth2OIDCApi';
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,WAEzB;AAGD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,iBAAiB,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAG9C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAIlD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC","file":"index.d.ts","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8')\n);\n\nexport function getVersion() {\n return `v${pkg.version}`;\n}\n\n// Api Layer\nexport * as NodeRaw from './api/NodeApi';\nexport * as TreeRaw from './api/TreeApi';\nexport * as StartupRaw from './api/StartupApi';\n\n// Ops Layer\nexport * as Admin from './ops/AdminOps';\nexport * as Authenticate from './ops/AuthenticateOps';\nexport * as CirclesOfTrust from './ops/CirclesOfTrustOps';\nexport * as ConnectionProfile from './ops/ConnectionProfileOps';\nexport * as EmailTemplate from './ops/EmailTemplateOps';\nexport * as Idm from './ops/IdmOps';\nexport * as Idp from './ops/IdmOps';\nexport * as Journey from './ops/JourneyOps';\nexport * as Log from './ops/LogOps';\nexport * as ManagedObject from './ops/ManagedObjectOps';\nexport * as OAuth2Client from './ops/OAuth2ClientOps';\nexport * as Organization from './ops/OrganizationOps';\nexport * as Realm from './ops/RealmOps';\nexport * as Saml from './ops/SamlOps';\nexport * as Script from './ops/ScriptOps';\nexport * as Secrets from './ops/SecretsOps';\nexport * as Startup from './ops/StartupOps';\nexport * as Theme from './ops/ThemeOps';\nexport * as Variables from './ops/VariablesOps';\n// TODO: revisit if there are better ways\nexport * as Utils from './ops/utils/OpsUtils';\n// TODO: reconsider the aproach to pass in state from client\n// lib should be stateless, an aplication should own its state\nexport * as state from './storage/SessionStorage';\n// TODO: need to figure out if this is the right approach or if we should even\n// use a public oauth2/oidc library. might be ok for now since there is only\n// one place where the cli needs to execute an oauth flow.\nexport * as OAuth2OIDCApi from './api/OAuth2OIDCApi';\n"]}
@@ -0,0 +1,11 @@
1
+ export declare function listOAuth2CustomClients(): Promise<any>;
2
+ export declare function listOAuth2AdminClients(): Promise<any>;
3
+ export declare function listNonOAuth2AdminStaticUserMappings(showProtected: any): Promise<any>;
4
+ export declare function addAutoIdStaticUserMapping(): Promise<void>;
5
+ export declare function grantOAuth2ClientAdminPrivileges(clientId: any): Promise<void>;
6
+ export declare function revokeOAuth2ClientAdminPrivileges(clientId: any): Promise<void>;
7
+ export declare function createOAuth2ClientWithAdminPrivileges(clientId: any, clientSecret: any): Promise<void>;
8
+ export declare function createLongLivedToken(clientId: any, clientSecret: any, scope: any, secret: any, lifetime: any): Promise<any>;
9
+ export declare function removeStaticUserMapping(subject: any): Promise<void>;
10
+ export declare function hideGenericExtensionAttributes(includeCustomized: any, dryRun: any): Promise<void>;
11
+ export declare function showGenericExtensionAttributes(includeCustomized: any, dryRun: any): Promise<void>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ops/AdminOps.ts"],"names":[],"mappings":"AAsFA,wBAAsB,uBAAuB,iBAW5C;AAwBD,wBAAsB,sBAAsB,iBAiC3C;AA2CD,wBAAsB,oCAAoC,CAAC,aAAa,KAAA,gBA4BvE;AAsKD,wBAAsB,0BAA0B,kBA+C/C;AAED,wBAAsB,gCAAgC,CAAC,QAAQ,KAAA,iBAsB9D;AAoHD,wBAAsB,iCAAiC,CAAC,QAAQ,KAAA,iBAsB/D;AAED,wBAAsB,qCAAqC,CACzD,QAAQ,KAAA,EACR,YAAY,KAAA,iBAeb;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,KAAA,EACR,YAAY,KAAA,EACZ,KAAK,KAAA,EACL,MAAM,KAAA,EACN,QAAQ,KAAA,gBAwCT;AAED,wBAAsB,uBAAuB,CAAC,OAAO,KAAA,iBAyBpD;AAED,wBAAsB,8BAA8B,CAClD,iBAAiB,KAAA,EACjB,MAAM,KAAA,iBA0CP;AAED,wBAAsB,8BAA8B,CAClD,iBAAiB,KAAA,EACjB,MAAM,KAAA,iBA0CP","file":"AdminOps.d.ts","sourcesContent":["import fs from 'fs';\nimport _ from 'lodash';\nimport {\n getOAuth2Clients,\n getOAuth2Client,\n putOAuth2Client,\n} from '../api/OAuth2ClientApi';\nimport { getConfigEntity, putConfigEntity } from '../api/IdmConfigApi';\nimport { isEqualJson, getRealmManagedUser } from './utils/OpsUtils';\nimport { getRealmManagedOrganization } from './OrganizationOps';\nimport { getOAuth2Provider } from '../api/OAuth2ProviderApi';\nimport { putSecret } from '../api/SecretsApi';\nimport { clientCredentialsGrant } from '../api/OAuth2OIDCApi';\nimport { printMessage } from './utils/Console';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst OAUTH2_CLIENT = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './templates/OAuth2ClientTemplate.json'),\n 'utf8'\n )\n);\nconst GENERIC_EXTENSION_ATTRIBUTES = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './templates/cloud/GenericExtensionAttributesTemplate.json'\n ),\n 'utf8'\n )\n);\n\nconst protectedClients = ['ui', 'idm-provisioning'];\nconst protectedSubjects = ['amadmin', 'autoid-resource-server'];\n\nconst privilegedScopes = [\n 'am-introspect-all-tokens',\n 'fr:idm:*',\n 'fr:idc:esv:*',\n];\n// const privilegedUsers = ['openidm-admin'];\nconst privilegedRoles = [\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\n\nconst adminScopes = ['fr:idm:*', 'fr:idc:esv:*'];\nconst adminDefaultScopes = ['fr:idm:*'];\nconst adminRoles = [\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\nconst autoIdRoles = [\n 'internal/role/platform-provisioning',\n 'internal/role/openidm-authorized',\n 'internal/role/openidm-admin',\n];\n\n/*\n * List all oauth2 clients, which have a corresponding staticUserMapping\n * in the IDM authentication.json:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"someOauth2ClientID\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n },\n {\n \"subject\": \"RCSClient\",\n \"localUser\": \"internal/user/idm-provisioning\"\n }\n ]\n }\n }\n */\nexport async function listOAuth2CustomClients() {\n let clients = (await getOAuth2Clients()).data.result;\n clients = clients\n .map((client) => client._id)\n .filter((client) => !protectedClients.includes(client));\n const authentication = (await getConfigEntity('authentication')).data;\n const subjects = authentication.rsFilter.staticUserMapping\n .map((mapping) => mapping.subject)\n .filter((subject) => !protectedSubjects.includes(subject));\n const adminClients = subjects.filter((subject) => clients.includes(subject));\n return adminClients;\n}\n\n/*\n * List all oauth2 clients, which have the fr:idm:* scope and a \n * corresponding staticUserMapping in the IDM authentication.json\n * and are assigned admin privileges:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"someOauth2ClientID\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function listOAuth2AdminClients() {\n let clients = (await getOAuth2Clients()).data.result;\n clients = clients\n .filter((client) => {\n let isPrivileged = false;\n if (client.coreOAuth2ClientConfig.scopes) {\n client.coreOAuth2ClientConfig.scopes.forEach((scope) => {\n if (privilegedScopes.includes(scope)) {\n isPrivileged = true;\n }\n });\n }\n return isPrivileged;\n })\n .map((client) => client._id)\n .filter((client) => !protectedClients.includes(client));\n const authentication = (await getConfigEntity('authentication')).data;\n const subjects = authentication.rsFilter.staticUserMapping\n .filter((mapping) => {\n let isPrivileged = false;\n if (mapping.roles) {\n mapping.roles.forEach((role) => {\n if (privilegedRoles.includes(role)) {\n isPrivileged = true;\n }\n });\n }\n return isPrivileged;\n })\n .map((mapping) => mapping.subject)\n .filter((subject) => !protectedSubjects.includes(subject));\n const adminClients = subjects.filter((subject) => clients.includes(subject));\n return adminClients;\n}\n\n/*\n * List all static user mappings that are not oauth2 clients in authentication.json\n * and are assigned admin privileges:\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n {\n \"subject\": \"amadmin\",\n \"localUser\": \"internal/user/openidm-admin\",\n \"userRoles\": \"authzRoles/*\",\n \"roles\": [\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n },\n {\n \"subject\": \"idm-provisioning\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\"\n ]\n },\n {\n \"subject\": \"RCSClient\",\n \"localUser\": \"internal/user/idm-provisioning\"\n },\n {\n \"subject\": \"autoid-resource-server\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\",\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function listNonOAuth2AdminStaticUserMappings(showProtected) {\n let clients = (await getOAuth2Clients()).data.result;\n clients = clients\n .map((client) => client._id)\n .filter((client) => !protectedClients.includes(client));\n const authentication = (await getConfigEntity('authentication')).data;\n let subjects = authentication.rsFilter.staticUserMapping\n .filter((mapping) => {\n let isPrivileged = false;\n if (mapping.roles) {\n mapping.roles.forEach((role) => {\n if (privilegedRoles.includes(role)) {\n isPrivileged = true;\n }\n });\n }\n return isPrivileged;\n })\n .map((mapping) => mapping.subject);\n if (!showProtected) {\n subjects = subjects.filter(\n (subject) => !protectedSubjects.includes(subject)\n );\n }\n const adminSubjects = subjects.filter(\n (subject) => !clients.includes(subject)\n );\n return adminSubjects;\n}\n\nasync function getDynamicClientRegistrationScope() {\n const provider = (await getOAuth2Provider()).data;\n return provider.clientDynamicRegistrationConfig\n .dynamicClientRegistrationScope;\n}\n\nasync function addAdminScopes(clientId, client) {\n const modClient = client;\n const allAdminScopes = adminScopes.concat([\n await getDynamicClientRegistrationScope(),\n ]);\n let addScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.scopes &&\n modClient.coreOAuth2ClientConfig.scopes.value\n ) {\n addScopes = allAdminScopes.filter((scope) => {\n let add = false;\n if (!modClient.coreOAuth2ClientConfig.scopes.value.includes(scope)) {\n add = true;\n }\n return add;\n });\n modClient.coreOAuth2ClientConfig.scopes.value =\n modClient.coreOAuth2ClientConfig.scopes.value.concat(addScopes);\n } else {\n modClient.coreOAuth2ClientConfig.scopes.value = allAdminScopes;\n }\n let addDefaultScope = false;\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes &&\n modClient.coreOAuth2ClientConfig.defaultScopes.value\n ) {\n if (modClient.coreOAuth2ClientConfig.defaultScopes.value.length === 0) {\n addDefaultScope = true;\n modClient.coreOAuth2ClientConfig.defaultScopes.value = adminDefaultScopes;\n } else {\n printMessage(\n `Client \"${clientId}\" already has default scopes configured, not adding admin default scope.`\n );\n }\n }\n if (addScopes.length > 0 || addDefaultScope) {\n printMessage(`Adding admin scopes to client \"${clientId}\"...`);\n } else {\n printMessage(`Client \"${clientId}\" already has admin scopes.`);\n }\n return modClient;\n}\n\nfunction addClientCredentialsGrantType(clientId, client) {\n const modClient = client;\n let modified = false;\n if (\n modClient.advancedOAuth2ClientConfig.grantTypes &&\n modClient.advancedOAuth2ClientConfig.grantTypes.value\n ) {\n if (\n !modClient.advancedOAuth2ClientConfig.grantTypes.value.includes(\n 'client_credentials'\n )\n ) {\n modified = true;\n modClient.advancedOAuth2ClientConfig.grantTypes.value.push(\n 'client_credentials'\n );\n }\n } else {\n modClient.advancedOAuth2ClientConfig.grantTypes.value = [\n 'client_credentials',\n ];\n }\n modClient.advancedOAuth2ClientConfig.grantTypes.inherited = false;\n if (modified) {\n printMessage(\n `Adding client credentials grant type to client \"${clientId}\"...`\n );\n } else {\n printMessage(\n `Client \"${clientId}\" already has client credentials grant type.`\n );\n }\n return modClient;\n}\n\nasync function addAdminStaticUserMapping(name) {\n let authentication = {};\n try {\n authentication = (await getConfigEntity('authentication')).data;\n } catch (error) {\n printMessage(\n `Error reading IDM authentication configuration: ${error.message}`,\n 'error'\n );\n }\n let needsAdminMapping = true;\n let addRoles = [];\n const mappings = authentication['rsFilter']['staticUserMapping'].map(\n (mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n needsAdminMapping = false;\n addRoles = adminRoles.filter((role) => {\n let add = false;\n if (!mapping.roles.includes(role)) {\n add = true;\n }\n return add;\n });\n const newMapping = mapping;\n newMapping.roles = newMapping.roles.concat(addRoles);\n return newMapping;\n }\n );\n if (needsAdminMapping) {\n printMessage(`Creating static user mapping for client \"${name}\"...`);\n mappings.push({\n subject: name,\n localUser: 'internal/user/openidm-admin',\n userRoles: 'authzRoles/*',\n roles: adminRoles,\n });\n }\n authentication['rsFilter']['staticUserMapping'] = mappings;\n if (addRoles.length > 0 || needsAdminMapping) {\n printMessage(\n `Adding admin roles to static user mapping for client \"${name}\"...`\n );\n try {\n await putConfigEntity('authentication', authentication);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n } else {\n printMessage(\n `Static user mapping for client \"${name}\" already has admin roles.`\n );\n }\n}\n\n/*\n * Add AutoId static user mapping to authentication.json to enable dashboards and other AutoId-based functionality.\n {\n \"_id\": \"authentication\",\n \"rsFilter\": {\n ...\n \"staticUserMapping\": [\n ...\n {\n \"subject\": \"autoid-resource-server\",\n \"localUser\": \"internal/user/idm-provisioning\",\n \"roles\": [\n \"internal/role/platform-provisioning\",\n \"internal/role/openidm-authorized\",\n \"internal/role/openidm-admin\"\n ]\n }\n ]\n }\n }\n */\nexport async function addAutoIdStaticUserMapping() {\n const name = 'autoid-resource-server';\n const authentication = (await getConfigEntity('authentication')).data;\n let needsAdminMapping = true;\n let addRoles = [];\n const mappings = authentication.rsFilter.staticUserMapping.map((mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n needsAdminMapping = false;\n addRoles = autoIdRoles.filter((role) => {\n let add = false;\n if (!mapping.roles.includes(role)) {\n add = true;\n }\n return add;\n });\n const newMapping = mapping;\n newMapping.roles = newMapping.roles.concat(addRoles);\n return newMapping;\n });\n if (needsAdminMapping) {\n printMessage(`Creating static user mapping for AutoId client \"${name}\"...`);\n mappings.push({\n subject: name,\n localUser: 'internal/user/idm-provisioning',\n userRoles: 'authzRoles/*',\n roles: autoIdRoles,\n });\n }\n authentication.rsFilter.staticUserMapping = mappings;\n if (addRoles.length > 0 || needsAdminMapping) {\n printMessage(\n `Adding required roles to static user mapping for AutoId client \"${name}\"...`\n );\n try {\n await putConfigEntity('authentication', authentication);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n } else {\n printMessage(\n `Static user mapping for AutoId client \"${name}\" already has all required roles.`\n );\n }\n}\n\nexport async function grantOAuth2ClientAdminPrivileges(clientId) {\n let client = (await getOAuth2Client(clientId)).data;\n if (client.coreOAuth2ClientConfig.clientName.value.length === 0) {\n client.coreOAuth2ClientConfig.clientName.value = [clientId];\n }\n if (\n client.advancedOAuth2ClientConfig.descriptions.value.length === 0 ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Modified by Frodo'\n ) ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Created by Frodo'\n )\n ) {\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Modified by Frodo on ${new Date().toLocaleString()}`,\n ];\n }\n client = await addAdminScopes(clientId, client);\n client = addClientCredentialsGrantType(clientId, client);\n await putOAuth2Client(clientId, client);\n await addAdminStaticUserMapping(clientId);\n}\n\nasync function removeAdminScopes(name, client) {\n const modClient = client;\n const allAdminScopes = adminScopes.concat([\n await getDynamicClientRegistrationScope(),\n ]);\n let finalScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.scopes &&\n modClient.coreOAuth2ClientConfig.scopes.value\n ) {\n finalScopes = modClient.coreOAuth2ClientConfig.scopes.value.filter(\n (scope) => !allAdminScopes.includes(scope)\n );\n }\n if (\n modClient.coreOAuth2ClientConfig.scopes.value.length > finalScopes.length\n ) {\n printMessage(`Removing admin scopes from client \"${name}\"...`);\n modClient.coreOAuth2ClientConfig.scopes.value = finalScopes;\n } else {\n printMessage(`Client \"${name}\" has no admin scopes.`);\n }\n let finalDefaultScopes = [];\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes &&\n modClient.coreOAuth2ClientConfig.defaultScopes.value\n ) {\n finalDefaultScopes =\n modClient.coreOAuth2ClientConfig.defaultScopes.value.filter(\n (scope) => !adminDefaultScopes.includes(scope)\n );\n }\n if (\n modClient.coreOAuth2ClientConfig.defaultScopes.value.length >\n finalDefaultScopes.length\n ) {\n printMessage(`Removing admin default scopes from client \"${name}\"...`);\n modClient.coreOAuth2ClientConfig.defaultScopes.value = finalDefaultScopes;\n } else {\n printMessage(`Client \"${name}\" has no admin default scopes.`);\n }\n return modClient;\n}\n\nfunction removeClientCredentialsGrantType(clientId, client) {\n const modClient = client;\n let modified = false;\n let finalGrantTypes = [];\n if (\n modClient.advancedOAuth2ClientConfig.grantTypes &&\n modClient.advancedOAuth2ClientConfig.grantTypes.value\n ) {\n finalGrantTypes =\n modClient.advancedOAuth2ClientConfig.grantTypes.value.filter(\n (grantType) => grantType !== 'client_credentials'\n );\n modified =\n modClient.advancedOAuth2ClientConfig.grantTypes.value.length >\n finalGrantTypes.length;\n }\n if (modified) {\n printMessage(\n `Removing client credentials grant type from client \"${clientId}\"...`\n );\n modClient.advancedOAuth2ClientConfig.grantTypes.value = finalGrantTypes;\n } else {\n printMessage(\n `Client \"${clientId}\" does not allow client credentials grant type.`\n );\n }\n return modClient;\n}\n\nasync function removeAdminStaticUserMapping(name) {\n const authentication = (await getConfigEntity('authentication')).data;\n let finalRoles = [];\n let removeMapping = false;\n let modified = false;\n const mappings = authentication.rsFilter.staticUserMapping\n .map((mapping) => {\n // ignore mappings for other subjects\n if (mapping.subject !== name) {\n return mapping;\n }\n finalRoles = mapping.roles.filter((role) => !adminRoles.includes(role));\n const newMapping = mapping;\n removeMapping = finalRoles.length === 0; // if there are no more roles left on this mapping, flag it for removal\n modified = mapping.roles.length > finalRoles.length; // if there were roles removed, set modified flag\n newMapping.roles = finalRoles;\n return newMapping;\n })\n .filter((mapping) => mapping.subject !== name || !removeMapping);\n authentication.rsFilter.staticUserMapping = mappings;\n if (modified || removeMapping) {\n if (removeMapping) {\n printMessage(`Removing static user mapping for client \"${name}\"...`);\n } else {\n printMessage(\n `Removing admin roles from static user mapping for client \"${name}\"...`\n );\n }\n try {\n await putConfigEntity('authentication', authentication);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n } else {\n printMessage(\n `Static user mapping for client \"${name}\" has no admin roles.`\n );\n }\n}\n\nexport async function revokeOAuth2ClientAdminPrivileges(clientId) {\n let client = (await getOAuth2Client(clientId)).data;\n if (client.coreOAuth2ClientConfig.clientName.value.length === 0) {\n client.coreOAuth2ClientConfig.clientName.value = [clientId];\n }\n if (\n client.advancedOAuth2ClientConfig.descriptions.value.length === 0 ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Modified by Frodo'\n ) ||\n client.advancedOAuth2ClientConfig.descriptions.value[0].startsWith(\n 'Created by Frodo'\n )\n ) {\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Modified by Frodo on ${new Date().toLocaleString()}`,\n ];\n }\n client = await removeAdminScopes(clientId, client);\n client = removeClientCredentialsGrantType(clientId, client);\n await putOAuth2Client(clientId, client);\n await removeAdminStaticUserMapping(clientId);\n}\n\nexport async function createOAuth2ClientWithAdminPrivileges(\n clientId,\n clientSecret\n) {\n let client = OAUTH2_CLIENT;\n client.coreOAuth2ClientConfig.userpassword = clientSecret;\n client.coreOAuth2ClientConfig.clientName.value = [clientId];\n client.advancedOAuth2ClientConfig.descriptions.value = [\n `Created by Frodo on ${new Date().toLocaleString()}`,\n ];\n try {\n client = await addAdminScopes(clientId, client);\n await putOAuth2Client(clientId, client);\n await addAdminStaticUserMapping(clientId);\n } catch (error) {\n printMessage(`Error creating oauth2 client: ${error.message}`, 'error');\n }\n}\n\nexport async function createLongLivedToken(\n clientId,\n clientSecret,\n scope,\n secret,\n lifetime\n) {\n // get oauth2 client\n const client = (await getOAuth2Client(clientId)).data;\n client.userpassword = clientSecret;\n // remember current lifetime\n const rememberedLifetime =\n client.coreOAuth2ClientConfig.accessTokenLifetime.value || 3600;\n // set long token lifetime\n client.coreOAuth2ClientConfig.accessTokenLifetime.value = lifetime;\n await putOAuth2Client(clientId, client);\n const response = (await clientCredentialsGrant(clientId, clientSecret, scope))\n .data;\n const expires = new Date().getTime() + 1000 * response.expires_in;\n response.expires_on = new Date(expires).toLocaleString();\n // reset token lifetime\n client.coreOAuth2ClientConfig.accessTokenLifetime.value = rememberedLifetime;\n await putOAuth2Client(clientId, client);\n // create secret with token as value\n const description = 'Long-lived admin token';\n try {\n await putSecret(secret, response.access_token, description);\n response.secret = secret;\n } catch (error) {\n if (\n _.get(error, 'response.data.code') === 400 &&\n _.get(error, 'response.data.message') ===\n 'Failed to create secret, the secret already exists'\n ) {\n const newSecret = `${secret}-${expires}`;\n printMessage(\n `esv '${secret}' already exists, using ${newSecret}`,\n 'warn'\n );\n await putSecret(newSecret, response.access_token, description);\n response.secret = newSecret;\n }\n }\n delete response.access_token;\n return response;\n}\n\nexport async function removeStaticUserMapping(subject) {\n const authentication = (await getConfigEntity('authentication')).data;\n let removeMapping = false;\n const mappings = authentication.rsFilter.staticUserMapping.filter(\n (mapping) => {\n // find the subject and flag it\n if (mapping.subject === subject) {\n removeMapping = true;\n }\n // ignore mappings for other subjects\n return mapping.subject !== subject;\n }\n );\n authentication.rsFilter.staticUserMapping = mappings;\n if (removeMapping) {\n printMessage(`Removing static user mapping for subject \"${subject}\"...`);\n try {\n await putConfigEntity('authentication', authentication);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n } else {\n printMessage(`No static user mapping for subject \"${subject}\" found.`);\n }\n}\n\nexport async function hideGenericExtensionAttributes(\n includeCustomized,\n dryRun\n) {\n const managed = (await getConfigEntity('managed')).data;\n const propertyNames = Object.keys(GENERIC_EXTENSION_ATTRIBUTES);\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getRealmManagedUser()) {\n return object;\n }\n propertyNames.forEach((name) => {\n if (\n isEqualJson(\n GENERIC_EXTENSION_ATTRIBUTES[name],\n object.schema.properties[name],\n ['viewable', 'usageDescription']\n ) ||\n includeCustomized\n ) {\n if (object.schema.properties[name].viewable) {\n printMessage(`${name}: hide`);\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].viewable = false;\n } else {\n printMessage(`${name}: ignore (already hidden)`);\n }\n } else {\n printMessage(`${name}: skip (customized)`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (dryRun) {\n printMessage('Dry-run only. Changes are not saved.');\n } else {\n try {\n await putConfigEntity('managed', managed);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n }\n}\n\nexport async function showGenericExtensionAttributes(\n includeCustomized,\n dryRun\n) {\n const managed = (await getConfigEntity('managed')).data;\n const propertyNames = Object.keys(GENERIC_EXTENSION_ATTRIBUTES);\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getRealmManagedUser()) {\n return object;\n }\n propertyNames.forEach((name) => {\n if (\n isEqualJson(\n GENERIC_EXTENSION_ATTRIBUTES[name],\n object.schema.properties[name],\n ['viewable', 'usageDescription']\n ) ||\n includeCustomized\n ) {\n if (!object.schema.properties[name].viewable) {\n printMessage(`${name}: show`);\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].viewable = true;\n } else {\n printMessage(`${name}: ignore (already showing)`);\n }\n } else {\n printMessage(`${name}: skip (customized)`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (dryRun) {\n printMessage('Dry-run only. Changes are not saved.');\n } else {\n try {\n await putConfigEntity('managed', managed);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n }\n}\n\nasync function repairOrgModelUser(dryRun) {\n const managed = (await getConfigEntity('managed')).data;\n const RDVPs = ['memberOfOrgIDs'];\n let repairData = false;\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getRealmManagedUser()) {\n return object;\n }\n printMessage(`${object.name}: checking...`);\n RDVPs.forEach((name) => {\n if (!object.schema.properties[name].queryConfig.flattenProperties) {\n printMessage(`- ${name}: repairing - needs flattening`, 'warn');\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].queryConfig.flattenProperties = true;\n repairData = true;\n } else {\n printMessage(`- ${name}: OK`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (!dryRun) {\n try {\n await putConfigEntity('managed', managed);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n }\n return repairData;\n}\n\nasync function repairOrgModelOrg(dryRun) {\n const managed = (await getConfigEntity('managed')).data;\n const RDVPs = [\n 'adminIDs',\n 'ownerIDs',\n 'parentAdminIDs',\n 'parentOwnerIDs',\n 'parentIDs',\n ];\n let repairData = false;\n const updatedObjects = managed.objects.map((object) => {\n // ignore all other objects\n if (object.name !== getRealmManagedOrganization()) {\n return object;\n }\n printMessage(`${object.name}: checking...`);\n RDVPs.forEach((name) => {\n if (!object.schema.properties[name].queryConfig.flattenProperties) {\n printMessage(`- ${name}: repairing - needs flattening`, 'warn');\n // eslint-disable-next-line no-param-reassign\n object.schema.properties[name].queryConfig.flattenProperties = true;\n repairData = true;\n } else {\n printMessage(`- ${name}: OK`);\n }\n });\n return object;\n });\n managed.objects = updatedObjects;\n if (!dryRun) {\n try {\n await putConfigEntity('managed', managed);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n }\n return repairData;\n}\n\n// async function repairOrgModelData(dryRun = false) {\n// if (!dryRun) {\n// // const rootOrgs = await findRootOrganizations();\n// }\n// }\n\n// async function extendOrgModelPermissins(dryRun = false) {\n// if (!dryRun) {\n// // const rootOrgs = await findRootOrganizations();\n// }\n// }\n\n// export async function repairOrgModel(\n// excludeCustomized,\n// extendPermissions,\n// dryRun\n// ) {\n// let repairData = false;\n// repairData = repairData || (await repairOrgModelUser(dryRun));\n// repairData = repairData || (await repairOrgModelOrg(dryRun));\n// if (repairData) {\n// await repairOrgModelData(dryRun);\n// }\n// if (extendPermissions) {\n// await extendOrgModelPermissins(dryRun);\n// }\n// if (dryRun) {\n// printMessage('Dry-run only. Changes are not saved.', 'warn');\n// }\n// }\n\n// suggested by John K.\n// export async function removeRealmNameFromManagedObjectLabels() {}\n// export async function addRealmNameToManagedObjectLabels() {}\n// export async function cleanUpPostmanArtifacts() {}\n// export async function createSampleThemes() {}\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Get tokens
3
+ * @param {boolean} save true to save a connection profile upon successful authentication, false otherwise
4
+ * @returns {boolean} true if tokens were successfully obtained, false otherwise
5
+ */
6
+ export declare function getTokens(save?: boolean): Promise<boolean>;