@rockcarver/frodo-lib 0.17.0 → 0.17.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.
package/CHANGELOG.md CHANGED
@@ -7,7 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [0.17.0] - 2022-12-18
10
+ ## [0.17.2-0] - 2022-12-21
11
+
12
+ ## [0.17.1] - 2022-12-18
11
13
 
12
14
  ### Added
13
15
 
@@ -171,8 +173,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
171
173
 
172
174
  ### Fixed
173
175
 
176
+ - \#194: Default realm is not properly detected and leading to errors
174
177
  - \#137: Error fetching logs with txId
175
178
 
179
+ ## [0.17.0] - 2022-12-18 [YANKED]
180
+
176
181
  ## [0.16.2-20] - 2022-12-17
177
182
 
178
183
  ## [0.16.2-19] - 2022-12-14
@@ -892,7 +897,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
892
897
  - Fixed problem with adding connection profiles
893
898
  - Miscellaneous bug fixes
894
899
 
895
- [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.17.0...HEAD
900
+ [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.17.2-0...HEAD
901
+
902
+ [0.17.2-0]: https://github.com/rockcarver/frodo-lib/compare/v0.17.1...v0.17.2-0
903
+
904
+ [0.17.1]: https://github.com/rockcarver/frodo-lib/compare/v0.17.0...v0.17.1
896
905
 
897
906
  [0.17.0]: https://github.com/rockcarver/frodo-lib/compare/v0.16.2-20...v0.17.0
898
907
 
@@ -1 +1 @@
1
- {"version":3,"file":"TreeApi.test.js","names":["__dirname","path","dirname","fileURLToPath","mock","MockAdapter","axios","state","setHost","setRealm","setCookieName","setCookieValue","describe","test","expect","TreeRaw","getTrees","toBeDefined","response","JSON","parse","fs","readFileSync","resolve","onGet","getHost","reply","trees","toBeTruthy","toMatchSnapshot","getTree","tree","code","reason","message","error","data","putTree","onPut","request","assertions","detail","validAttributes","deleteTree","onDelete"],"sources":["api/TreeApi.test.ts"],"sourcesContent":["import axios from 'axios';\nimport MockAdapter from 'axios-mock-adapter';\nimport { TreeRaw, state } from '../index';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst mock = new MockAdapter(axios);\n\nstate.setHost('');\nstate.setRealm('alpha');\nstate.setCookieName('cookieName');\nstate.setCookieValue('cookieValue');\n\ndescribe('TreeApi - getTrees()', () => {\n test('getTrees() 0: Method is implemented', async () => {\n expect(TreeRaw.getTrees).toBeDefined();\n });\n\n test('getTrees() 1: Get all trees', async () => {\n const response = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, '../test/mocks/TreeApi/getTrees/trees.json'),\n 'utf8'\n )\n );\n mock\n .onGet(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees?_queryFilter=true`\n )\n .reply(200, response);\n const trees = await TreeRaw.getTrees();\n expect(trees).toBeTruthy();\n expect(trees).toMatchSnapshot();\n });\n});\n\ndescribe('TreeApi - getTree()', () => {\n test('getTree() 0: Method is implemented', async () => {\n expect(TreeRaw.getTree).toBeDefined();\n });\n\n test('getTree() 1: Get existing tree', async () => {\n const response = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, '../test/mocks/TreeApi/getTree/FrodoTest.json'),\n 'utf8'\n )\n );\n mock\n .onGet(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/FrodoTest`\n )\n .reply(200, response);\n const tree = await TreeRaw.getTree('FrodoTest');\n expect(tree).toBeTruthy();\n expect(tree).toMatchSnapshot();\n });\n\n test('getTree() 2: Get non-existing tree', async () => {\n mock\n .onGet(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/DoesNotExist`\n )\n .reply(404, {\n code: 404,\n reason: 'Not Found',\n message: 'Not Found',\n });\n try {\n await TreeRaw.getTree('DoesNotExist');\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n});\n\ndescribe('TreeApi - putTree()', () => {\n test('putTree() 0: Method is implemented', async () => {\n expect(TreeRaw.putTree).toBeDefined();\n });\n\n test('putTree() 1: Put valid tree', async () => {\n const response = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, '../test/mocks/TreeApi/putTree/FrodoTest.json'),\n 'utf8'\n )\n );\n mock\n .onPut(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/FrodoTest`\n )\n .reply(201, response);\n const tree = await TreeRaw.putTree('FrodoTest', response);\n expect(tree).toBeTruthy();\n expect(tree).toMatchSnapshot();\n });\n\n test('putTree() 2: Put invalid tree [trailing data]', async () => {\n const request = fs.readFileSync(\n path.resolve(\n __dirname,\n '../test/mocks/TreeApi/putTree/Invalid_trailing-data.txt'\n ),\n 'utf8'\n );\n mock\n .onPut(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/Invalid`\n )\n .reply(400, {\n code: 400,\n reason: 'Bad Request',\n message:\n 'The request could not be processed because there is trailing data after the JSON content',\n });\n expect.assertions(2);\n try {\n await TreeRaw.putTree('Invalid', request);\n } catch (error) {\n expect(error.response).toBeTruthy();\n expect(error.response.data).toMatchSnapshot();\n }\n });\n\n test('putTree() 3: Put invalid tree [invalid attribute]', async () => {\n const request = fs.readFileSync(\n path.resolve(\n __dirname,\n '../test/mocks/TreeApi/putTree/Invalid_invalid-attribute.json'\n ),\n 'utf8'\n );\n mock\n .onPut(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/Invalid`\n )\n .reply(400, {\n code: 400,\n reason: 'Bad Request',\n message: 'Invalid attribute specified.',\n detail: {\n validAttributes: [\n 'description',\n 'enabled',\n 'entryNodeId',\n 'identityResource',\n 'nodes',\n 'staticNodes',\n 'uiConfig',\n ],\n },\n });\n expect.assertions(2);\n try {\n await TreeRaw.putTree('Invalid', request);\n } catch (error) {\n expect(error.response).toBeTruthy();\n expect(error.response.data).toMatchSnapshot();\n }\n });\n\n test('putTree() 4: Put invalid tree [no entry node]', async () => {\n const request = fs.readFileSync(\n path.resolve(\n __dirname,\n '../test/mocks/TreeApi/putTree/Invalid_no-entry-node.json'\n ),\n 'utf8'\n );\n mock\n .onPut(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/Invalid`\n )\n .reply(400, {\n code: 400,\n reason: 'Bad Request',\n message: 'Node with ID entryNodeId must exist in the tree.',\n });\n expect.assertions(2);\n try {\n await TreeRaw.putTree('Invalid', request);\n } catch (error) {\n expect(error.response).toBeTruthy();\n expect(error.response.data).toMatchSnapshot();\n }\n });\n\n test('putTree() 5: Put invalid tree [invalid nodes]', async () => {\n const request = fs.readFileSync(\n path.resolve(\n __dirname,\n '../test/mocks/TreeApi/putTree/Invalid_invalid-nodes.json'\n ),\n 'utf8'\n );\n mock\n .onPut(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/Invalid`\n )\n .reply(400, {\n code: 400,\n reason: 'Bad Request',\n message: 'Node with ID entryNodeId must exist in the tree.',\n });\n expect.assertions(2);\n try {\n await TreeRaw.putTree('Invalid', request);\n } catch (error) {\n expect(error.response).toBeTruthy();\n expect(error.response.data).toMatchSnapshot();\n }\n });\n});\n\ndescribe('TreeApi - deleteTree()', () => {\n test('deleteTree() 0: Method is implemented', async () => {\n expect(TreeRaw.deleteTree).toBeDefined();\n });\n\n test('deleteTree() 1: Delete existing tree', async () => {\n const response = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n '../test/mocks/TreeApi/deleteTree/FrodoTest.json'\n ),\n 'utf8'\n )\n );\n mock\n .onDelete(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/FrodoTest`\n )\n .reply(200, response);\n const tree = await TreeRaw.deleteTree('FrodoTest');\n expect(tree).toBeTruthy();\n expect(tree).toMatchSnapshot();\n });\n\n test('deleteTree() 2: Delete non-existing tree', async () => {\n mock\n .onDelete(\n `${state.getHost()}/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/DoesNotExist`\n )\n .reply(404, {\n code: 404,\n reason: 'Not Found',\n message: 'Not Found',\n });\n expect.assertions(2);\n try {\n await TreeRaw.deleteTree('DoesNotExist');\n } catch (error) {\n expect(error.response).toBeTruthy();\n expect(error.response.data).toMatchSnapshot();\n }\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"TreeApi.test.js","names":["autoSetupPolly","describe","test","expect","TreeRaw","getTrees","toBeDefined","response","toMatchSnapshot","getTree","error","data","putTree","treeData","JSON","parse","stringify","identityResource","uiConfig","categories","entryNodeId","nodes","connections","localAuthentication","socialAuthentication","displayName","nodeType","x","y","ACCOUNT_EXISTS","NO_ACCOUNT","EMAIL_NOT_SENT","EMAIL_SENT","known","unknown","CANCELLED","EXPIRED","FALSE","LOCKED","TRUE","staticNodes","startNode","enabled","description","nodes2","invalid","deleteTree"],"sources":["api/TreeApi.test.ts"],"sourcesContent":["/**\n * To record and update snapshots, you must perform 3 steps in order:\n *\n * 1. Record API responses & update ESM snapshots\n *\n * To record and update ESM snapshots, you must call the test:record\n * script and override all the connection state variables required\n * to connect to the env to record from:\n *\n * FRODO_DEBUG=1 FRODO_HOST=volker-dev npm run test:record TreeApi\n *\n * The above command assumes that you have a connection profile for\n * 'volker-dev' on your development machine.\n *\n * 2. Update CJS snapshots\n *\n * After recording, the ESM snapshots will already be updated as that happens\n * in one go, but you musty manually update the CJS snapshots by running:\n *\n * FRODO_DEBUG=1 npm run test:update TreeApi\n *\n * 3. Test your changes\n *\n * If 1 and 2 didn't produce any errors, you are ready to run the tests in\n * replay mode and make sure they all succeed as well:\n *\n * npm run test TreeApi\n *\n * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output\n * in case things don't function as expected\n */\nimport { TreeRaw } from '../index';\nimport { autoSetupPolly } from '../utils/AutoSetupPolly';\n\nautoSetupPolly();\n\ndescribe('TreeApi', () => {\n describe('getTrees()', () => {\n test('0: Method is implemented', async () => {\n expect(TreeRaw.getTrees).toBeDefined();\n });\n\n test('1: Get all trees', async () => {\n const response = await TreeRaw.getTrees();\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getTree()', () => {\n test('0: Method is implemented', async () => {\n expect(TreeRaw.getTree).toBeDefined();\n });\n\n test('1: Get existing tree', async () => {\n const response = await TreeRaw.getTree('FrodoTest');\n expect(response).toMatchSnapshot();\n });\n\n test('2: Get non-existing tree', async () => {\n try {\n await TreeRaw.getTree('DoesNotExist');\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n\n describe('putTree()', () => {\n test('0: Method is implemented', async () => {\n expect(TreeRaw.putTree).toBeDefined();\n });\n\n test('1: Put valid tree', async () => {\n const treeData = JSON.parse(\n JSON.stringify({\n identityResource: 'managed/alpha_user',\n uiConfig: {\n categories: '[]',\n },\n entryNodeId: 'e2c39477-847a-4df2-9c5d-b449a752638b',\n nodes: {\n '278bf084-9eea-46fe-8ce9-2600dde3b046': {\n connections: {\n localAuthentication: 'fc7e47cd-c679-4211-8e05-a36654f23c67',\n socialAuthentication: 'd5cc2d52-6ce4-452d-85ea-3a5b50218b67',\n },\n displayName: 'Login Page',\n nodeType: 'PageNode',\n x: 444,\n y: 273.015625,\n },\n '64157fca-bd5b-4405-a4c8-64ffd98a5461': {\n connections: {\n ACCOUNT_EXISTS: '70e691a5-1e33-4ac3-a356-e7b6d60d92e0',\n NO_ACCOUNT: 'e301438c-0bd0-429c-ab0c-66126501069a',\n },\n displayName: 'SAML2 Authentication',\n nodeType: 'product-Saml2Node',\n x: 1168,\n y: 188.015625,\n },\n '731c5810-020b-45c8-a7fc-3c21903ae2b3': {\n connections: {\n localAuthentication: 'fc7e47cd-c679-4211-8e05-a36654f23c67',\n socialAuthentication: 'd5cc2d52-6ce4-452d-85ea-3a5b50218b67',\n },\n displayName: 'Login Page',\n nodeType: 'PageNode',\n x: 443,\n y: 26.015625,\n },\n 'bf153f37-83dd-4f39-aa0c-74135430242e': {\n connections: {\n EMAIL_NOT_SENT: 'e301438c-0bd0-429c-ab0c-66126501069a',\n EMAIL_SENT: '64157fca-bd5b-4405-a4c8-64ffd98a5461',\n },\n displayName: 'Email Template Node',\n nodeType: 'EmailTemplateNode',\n x: 910,\n y: 224.015625,\n },\n 'd5cc2d52-6ce4-452d-85ea-3a5b50218b67': {\n connections: {\n ACCOUNT_EXISTS: '70e691a5-1e33-4ac3-a356-e7b6d60d92e0',\n NO_ACCOUNT: 'bf153f37-83dd-4f39-aa0c-74135430242e',\n },\n displayName: 'Social Login',\n nodeType: 'SocialProviderHandlerNode',\n x: 702,\n y: 116.015625,\n },\n 'e2c39477-847a-4df2-9c5d-b449a752638b': {\n connections: {\n known: '731c5810-020b-45c8-a7fc-3c21903ae2b3',\n unknown: '278bf084-9eea-46fe-8ce9-2600dde3b046',\n },\n displayName: 'Check Username',\n nodeType: 'ScriptedDecisionNode',\n x: 200,\n y: 235.015625,\n },\n 'fc7e47cd-c679-4211-8e05-a36654f23c67': {\n connections: {\n CANCELLED: '70e691a5-1e33-4ac3-a356-e7b6d60d92e0',\n EXPIRED: '70e691a5-1e33-4ac3-a356-e7b6d60d92e0',\n FALSE: 'e301438c-0bd0-429c-ab0c-66126501069a',\n LOCKED: 'e301438c-0bd0-429c-ab0c-66126501069a',\n TRUE: '70e691a5-1e33-4ac3-a356-e7b6d60d92e0',\n },\n displayName: 'Validate Creds',\n nodeType: 'IdentityStoreDecisionNode',\n x: 702,\n y: 292.015625,\n },\n },\n staticNodes: {\n '70e691a5-1e33-4ac3-a356-e7b6d60d92e0': {\n x: 1434,\n y: 60,\n },\n 'e301438c-0bd0-429c-ab0c-66126501069a': {\n x: 1433,\n y: 459,\n },\n startNode: {\n x: 63,\n y: 252,\n },\n },\n enabled: true,\n })\n );\n const response = await TreeRaw.putTree('FrodoTest', treeData);\n expect(response).toMatchSnapshot();\n });\n\n test('2: Put invalid tree [trailing data]', async () => {\n const treeData =\n JSON.stringify({\n entryNodeId: 'e301438c-0bd0-429c-ab0c-66126501069a',\n nodes: {},\n staticNodes: {},\n description: 'invalid tree def',\n identityResource: 'managed/alpha_user',\n uiConfig: {\n categories: '[]',\n },\n }) + '\\ntrailing data';\n try {\n await TreeRaw.putTree('Invalid', treeData);\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n\n test('3: Put invalid tree [invalid attribute]', async () => {\n const treeData = JSON.parse(\n JSON.stringify({\n entryNodeId: 'e301438c-0bd0-429c-ab0c-66126501069a',\n nodes2: {},\n staticNodes: {},\n description: 'invalid tree def',\n identityResource: 'managed/alpha_user',\n uiConfig: {\n categories: '[]',\n },\n })\n );\n try {\n await TreeRaw.putTree('Invalid', treeData);\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n\n test('4: Put invalid tree [no entry node]', async () => {\n const treeData = JSON.parse(\n JSON.stringify({\n nodes: {},\n staticNodes: {},\n description: 'invalid tree def',\n identityResource: 'managed/alpha_user',\n uiConfig: {\n categories: '[]',\n },\n })\n );\n try {\n await TreeRaw.putTree('Invalid', treeData);\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n\n test('5: Put invalid tree [invalid nodes]', async () => {\n const treeData = JSON.parse(\n JSON.stringify({\n entryNodeId: 'e301438c-0bd0-429c-ab0c-66126501069a',\n nodes: {\n invalid: 'bad data',\n },\n staticNodes: {},\n description: 'invalid tree def',\n identityResource: 'managed/alpha_user',\n uiConfig: {\n categories: '[]',\n },\n })\n );\n try {\n await TreeRaw.putTree('Invalid', treeData);\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n\n describe('deleteTree()', () => {\n test('0: Method is implemented', async () => {\n expect(TreeRaw.deleteTree).toBeDefined();\n });\n\n test('1: Delete existing tree', async () => {\n const response = await TreeRaw.deleteTree('FrodoTest');\n expect(response).toMatchSnapshot();\n });\n\n test('2: Delete non-existing tree', async () => {\n try {\n await TreeRaw.deleteTree('DoesNotExist');\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"VariablesApi.test.js","names":["pollyContext","autoSetupPolly","describe","test","expect","VariablesRaw","getVariables","toBeDefined","response","toMatchSnapshot","error","data","getVariable","putVariable","setVariableDescription","deleteVariable"],"sources":["api/VariablesApi.test.ts"],"sourcesContent":["import { VariablesRaw } from '../index';\nimport autoSetupPolly from '../utils/AutoSetupPolly';\n\nconst pollyContext = autoSetupPolly();\n\ndescribe('VariablesApi', () => {\n describe('VariablesApi - getVariables()', () => {\n test('getVariables() 0: Method is implemented', async () => {\n expect(VariablesRaw.getVariables).toBeDefined();\n });\n\n test('getVariables() 1: Get all variables - success', async () => {\n const response = await VariablesRaw.getVariables();\n expect(response).toMatchSnapshot();\n });\n\n test('getVariables() 2: Get all variables - error', async () => {\n try {\n await VariablesRaw.getVariables();\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n\n describe('VariablesApi - getVariable()', () => {\n test('getVariable() 0: Method is implemented', async () => {\n expect(VariablesRaw.getVariable).toBeDefined();\n });\n\n test('getVariable() 1: Get existing variable: esv-volkerstestvariable1', async () => {\n const response = await VariablesRaw.getVariable(\n 'esv-volkerstestvariable1'\n );\n expect(response).toMatchSnapshot();\n });\n\n test('getVariable() 2: Get non-existing variable: esv-does-not-exist', async () => {\n try {\n await VariablesRaw.getVariable('esv-does-not-exist');\n } catch (error) {\n // expect(error.response.status).toBe(404);\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n\n describe('VariablesApi - putVariable()', () => {\n test('putVariable() 0: Method is implemented', async () => {\n expect(VariablesRaw.putVariable).toBeDefined();\n });\n\n test('putVariable() 1: Create variable: esv-volkerstestvariable2 - success', async () => {\n const response = await VariablesRaw.putVariable(\n 'esv-volkerstestvariable2',\n \"Volker's Test Variable Value\",\n \"Volker's Test Variable Description\"\n );\n expect(response).toMatchSnapshot();\n });\n\n test('putVariable() 2: Create variable: esv-volkerstestvariable2 - error', async () => {\n try {\n await VariablesRaw.putVariable(\n 'esv-volkerstestvariable2',\n \"Volker's Test Variable Value\",\n \"Volker's Test Variable Description\"\n );\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n\n describe('VariablesApi - setVariableDescription()', () => {\n test('setVariableDescription() 0: Method is implemented', async () => {\n expect(VariablesRaw.setVariableDescription).toBeDefined();\n });\n\n test('setVariableDescription() 1: Set variable description: esv-volkerstestvariable2 - success', async () => {\n const response = await VariablesRaw.setVariableDescription(\n 'esv-volkerstestvariable2',\n \"Volker's Updated Test Secret Description\"\n );\n expect(response).toMatchSnapshot();\n });\n\n test('setVariableDescription() 2: Set variable description: esv-volkerstestvariable3 - error', async () => {\n try {\n await VariablesRaw.setVariableDescription(\n 'esv-volkerstestvariable3',\n \"Volker's Updated Test Secret Description\"\n );\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n\n describe('VariablesApi - deleteVariable()', () => {\n test('deleteVariable() 0: Method is implemented', async () => {\n expect(VariablesRaw.deleteVariable).toBeDefined();\n });\n\n test('deleteVariable() 1: Delete variable: esv-volkerstestvariable2 - success', async () => {\n const response = await VariablesRaw.deleteVariable(\n 'esv-volkerstestvariable2'\n );\n expect(response).toMatchSnapshot();\n });\n\n test('deleteVariable() 2: Delete variable: esv-volkerstestvariable3 - error', async () => {\n try {\n await VariablesRaw.deleteVariable('esv-volkerstestvariable3');\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"VariablesApi.test.js","names":["autoSetupPolly","describe","test","expect","VariablesRaw","getVariables","toBeDefined","response","toMatchSnapshot","getVariable","error","data","putVariable","setVariableDescription","deleteVariable"],"sources":["api/VariablesApi.test.ts"],"sourcesContent":["/**\n * To record and update snapshots, you must perform 3 steps in order:\n *\n * 1. Record API responses & update ESM snapshots\n *\n * To record and update ESM snapshots, you must call the test:record\n * script and override all the connection state variables required\n * to connect to the env to record from:\n *\n * FRODO_DEBUG=1 FRODO_HOST=volker-dev npm run test:record VariablesApi\n *\n * The above command assumes that you have a connection profile for\n * 'volker-dev' on your development machine.\n *\n * 2. Update CJS snapshots\n *\n * After recording, the ESM snapshots will already be updated as that happens\n * in one go, but you musty manually update the CJS snapshots by running:\n *\n * FRODO_DEBUG=1 npm run test:update VariablesApi\n *\n * 3. Test your changes\n *\n * If 1 and 2 didn't produce any errors, you are ready to run the tests in\n * replay mode and make sure they all succeed as well:\n *\n * npm run test VariablesApi\n *\n * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output\n * in case things don't function as expected\n */\nimport { VariablesRaw } from '../index';\nimport { autoSetupPolly } from '../utils/AutoSetupPolly';\n\nautoSetupPolly();\n\ndescribe('VariablesApi', () => {\n describe('getVariables()', () => {\n test('0: Method is implemented', async () => {\n expect(VariablesRaw.getVariables).toBeDefined();\n });\n\n test('1: Get all variables - success', async () => {\n const response = await VariablesRaw.getVariables();\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getVariable()', () => {\n test('0: Method is implemented', async () => {\n expect(VariablesRaw.getVariable).toBeDefined();\n });\n\n test('1: Get existing variable: esv-volkerstestvariable1', async () => {\n const response = await VariablesRaw.getVariable(\n 'esv-volkerstestvariable1'\n );\n expect(response).toMatchSnapshot();\n });\n\n test('2: Get non-existing variable: esv-does-not-exist', async () => {\n try {\n await VariablesRaw.getVariable('esv-does-not-exist');\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n\n describe('putVariable()', () => {\n test('0: Method is implemented', async () => {\n expect(VariablesRaw.putVariable).toBeDefined();\n });\n\n test('1: Create variable: esv-volkerstestvariable2 - success', async () => {\n const response = await VariablesRaw.putVariable(\n 'esv-volkerstestvariable2',\n \"Volker's Test Variable Value\",\n \"Volker's Test Variable Description\"\n );\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('setVariableDescription()', () => {\n test('0: Method is implemented', async () => {\n expect(VariablesRaw.setVariableDescription).toBeDefined();\n });\n\n test('1: Set variable description: esv-volkerstestvariable2 - success', async () => {\n const response = await VariablesRaw.setVariableDescription(\n 'esv-volkerstestvariable2',\n \"Volker's Updated Test Secret Description\"\n );\n expect(response).toMatchSnapshot();\n });\n\n test('2: Set variable description: esv-volkerstestvariable3 - error', async () => {\n try {\n await VariablesRaw.setVariableDescription(\n 'esv-volkerstestvariable3',\n \"Volker's Updated Test Secret Description\"\n );\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n\n describe('deleteVariable()', () => {\n test('0: Method is implemented', async () => {\n expect(VariablesRaw.deleteVariable).toBeDefined();\n });\n\n test('1: Delete variable: esv-volkerstestvariable2 - success', async () => {\n const response = await VariablesRaw.deleteVariable(\n 'esv-volkerstestvariable2'\n );\n expect(response).toMatchSnapshot();\n });\n\n test('2: Delete variable: esv-volkerstestvariable3 - error', async () => {\n try {\n await VariablesRaw.deleteVariable('esv-volkerstestvariable3');\n } catch (error) {\n expect(error.response.data).toMatchSnapshot();\n }\n });\n });\n});\n"],"mappings":"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"}
@@ -104,7 +104,7 @@ function checkAndHandle2FA(payload) {
104
104
  * @param {string} deploymentType deployment type
105
105
  */
106
106
  function determineDefaultRealm(deploymentType) {
107
- if (state.getRealm() === globalConfig.DEFAULT_REALM_KEY) {
107
+ if (!state.getRealm() || state.getRealm() === globalConfig.DEFAULT_REALM_KEY) {
108
108
  state.setRealm(globalConfig.DEPLOYMENT_TYPE_REALM_MAP[deploymentType]);
109
109
  }
110
110
  }
@@ -279,6 +279,7 @@ function getAccessTokenForUser() {
279
279
  }
280
280
  function _getAccessTokenForUser() {
281
281
  _getAccessTokenForUser = _asyncToGenerator(function* () {
282
+ (0, _Console.debugMessage)("AuthenticateOps.getAccessTokenForUser: start");
282
283
  try {
283
284
  var verifier = (0, _Base.encodeBase64Url)((0, _crypto.randomBytes)(32));
284
285
  var challenge = (0, _Base.encodeBase64Url)((0, _crypto.createHash)('sha256').update(verifier).digest());
@@ -304,6 +305,7 @@ function _getAccessTokenForUser() {
304
305
  response = yield (0, _OAuth2OIDCApi.accessToken)(_bodyFormData);
305
306
  }
306
307
  if ('access_token' in response.data) {
308
+ (0, _Console.debugMessage)("AuthenticateOps.getAccessTokenForUser: end with token");
307
309
  return response.data.access_token;
308
310
  }
309
311
  (0, _Console.printMessage)('No access token in response.', 'error');
@@ -312,6 +314,7 @@ function _getAccessTokenForUser() {
312
314
  (0, _Console.debugMessage)("Error getting access token for user: ".concat(error));
313
315
  (0, _Console.debugMessage)((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data);
314
316
  }
317
+ (0, _Console.debugMessage)("AuthenticateOps.getAccessTokenForUser: end without token");
315
318
  return null;
316
319
  });
317
320
  return _getAccessTokenForUser.apply(this, arguments);
@@ -381,6 +384,7 @@ function _determineDeploymentTypeAndDefaultRealmAndVersion() {
381
384
  state.setDeploymentType(yield determineDeploymentType());
382
385
  }
383
386
  determineDefaultRealm(state.getDeploymentType());
387
+ (0, _Console.debugMessage)("AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: realm=".concat(state.getRealm(), ", type=").concat(state.getDeploymentType()));
384
388
  var versionInfo = (yield (0, _ServerInfoApi.getServerVersionInfo)()).data;
385
389
 
386
390
  // https://github.com/rockcarver/frodo-cli/issues/109
@@ -415,6 +419,7 @@ function getTokens() {
415
419
  }
416
420
  function _getTokens() {
417
421
  _getTokens = _asyncToGenerator(function* () {
422
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: start");
418
423
  if (!state.getHost()) {
419
424
  (0, _Console.printMessage)("No host specified and FRODO_HOST env variable not set!", 'error');
420
425
  return false;
@@ -457,10 +462,17 @@ function _getTokens() {
457
462
  var _token = yield authenticate(state.getUsername(), state.getPassword());
458
463
  if (_token) state.setCookieValue(_token);
459
464
  yield determineDeploymentTypeAndDefaultRealmAndVersion();
465
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: before bearer");
466
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: cookie=".concat(state.getCookieValue()));
467
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: bearer=".concat(state.getBearerToken()));
468
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: type=".concat(state.getDeploymentType()));
469
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: condition=".concat(state.getCookieValue() && !state.getBearerToken() && (state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY || state.getDeploymentType() === globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY)));
460
470
  if (state.getCookieValue() && !state.getBearerToken() && (state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY || state.getDeploymentType() === globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY)) {
471
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: in bearer");
461
472
  var _accessToken = yield getAccessTokenForUser();
462
473
  if (_accessToken) state.setBearerToken(_accessToken);
463
474
  }
475
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: after bearer");
464
476
  }
465
477
  // incomplete or no credentials
466
478
  else {
@@ -470,6 +482,7 @@ function _getTokens() {
470
482
  if (state.getCookieValue() || state.getUseBearerTokenForAmApis() && state.getBearerToken()) {
471
483
  // https://github.com/rockcarver/frodo-cli/issues/102
472
484
  (0, _Console.printMessage)("Connected to ".concat(state.getHost(), " [").concat(state.getRealm() ? state.getRealm() : 'root', "] as ").concat(yield getLoggedInSubject()), 'info');
485
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: end with tokens");
473
486
  return true;
474
487
  }
475
488
  } catch (error) {
@@ -485,6 +498,7 @@ function _getTokens() {
485
498
  // stack trace
486
499
  (0, _Console.debugMessage)(error.stack || new Error().stack);
487
500
  }
501
+ (0, _Console.debugMessage)("AuthenticateOps.getTokens: end without tokens");
488
502
  return false;
489
503
  });
490
504
  return _getTokens.apply(this, arguments);
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticateOps.js","names":["adminClientPassword","redirectUrlTemplate","idmAdminScopes","serviceAccountScopes","adminClientId","determineCookieName","data","getServerInfo","debugMessage","cookieName","error","printMessage","stack","checkAndHandle2FA","payload","element","callbacks","type","input","value","includes","need2fa","output","code","readlineSync","question","determineDefaultRealm","deploymentType","state","getRealm","globalConfig","DEFAULT_REALM_KEY","setRealm","DEPLOYMENT_TYPE_REALM_MAP","determineDeploymentType","cookieValue","getCookieValue","getUseBearerTokenForAmApis","CLOUD_DEPLOYMENT_TYPE_KEY","fidcClientId","forgeopsClientId","verifier","encodeBase64Url","randomBytes","challenge","createHash","update","digest","challengeMethod","redirectURL","url","resolve","getHost","config","maxRedirects","headers","getCookieName","bodyFormData","CLASSIC_DEPLOYMENT_TYPE_KEY","authorize","e","response","status","location","indexOf","verboseMessage","ex","FORGEOPS_DEPLOYMENT_TYPE_KEY","getSemanticVersion","versionInfo","versionString","version","rx","match","Error","authenticate","username","password","response1","step","skip2FA","response2","getAuthCode","codeChallenge","codeChallengeMethod","undefined","redirectLocationURL","queryObject","parse","query","message","getAccessTokenForUser","authCode","getDeploymentType","auth","accessToken","access_token","createPayload","serviceAccountId","u","parseUrl","aud","origin","port","protocol","pathname","exp","Math","floor","Date","getTime","jti","v4","iss","sub","getAccessTokenForServiceAccount","jwk","jwt","createSignedJwtToken","determineDeploymentTypeAndDefaultRealmAndVersion","setDeploymentType","getServerVersionInfo","fullVersion","setAmVersion","getLoggedInSubject","subjectString","getUsername","name","getManagedObject","getServiceAccountId","getTokens","getPassword","getServiceAccountJwk","conn","getConnectionProfile","setHost","tenant","setUsername","setPassword","setAuthenticationService","authenticationService","setAuthenticationHeaderOverrides","authenticationHeaderOverrides","setServiceAccountId","svcacctId","setServiceAccountJwk","svcacctJwk","setCookieName","token","setBearerToken","setUseBearerTokenForAmApis","saErr","error_description","setCookieValue","getBearerToken"],"sources":["ops/AuthenticateOps.ts"],"sourcesContent":["import url from 'url';\nimport { createHash, randomBytes } from 'crypto';\nimport readlineSync from 'readline-sync';\nimport { encodeBase64Url } from '../api/utils/Base64';\nimport * as state from '../shared/State';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { debugMessage, printMessage, verboseMessage } from './utils/Console';\nimport { getServerInfo, getServerVersionInfo } from '../api/ServerInfoApi';\nimport { step } from '../api/AuthenticateApi';\nimport { accessToken, authorize } from '../api/OAuth2OIDCApi';\nimport { getConnectionProfile } from './ConnectionProfileOps';\nimport { v4 } from 'uuid';\nimport { parseUrl } from '../api/utils/ApiUtils';\nimport { JwkRsa, createSignedJwtToken } from './JoseOps';\nimport { getManagedObject } from '../api/ManagedObjectApi';\n\nconst adminClientPassword = 'doesnotmatter';\nconst redirectUrlTemplate = '/platform/appAuthHelperRedirect.html';\n\nconst idmAdminScopes = 'fr:idm:* openid';\nconst serviceAccountScopes = 'fr:am:* fr:idm:* fr:idc:esv:*';\n\nlet adminClientId = 'idmAdminClient';\n\n/**\n * Helper function to get cookie name\n * @returns {String} cookie name\n */\nasync function determineCookieName() {\n try {\n const { data } = await getServerInfo();\n debugMessage(\n `AuthenticateOps.getCookieName: cookieName=${data.cookieName}`\n );\n return data.cookieName;\n } catch (error) {\n printMessage(`Error getting cookie name: ${error}`, 'error');\n debugMessage(error.stack);\n return null;\n }\n}\n\n/**\n * Helper function to determine if this is a setup mfa prompt in the ID Cloud tenant admin login journey\n * @param {Object} payload response from the previous authentication journey step\n * @returns {Object} an object indicating if 2fa is required and the original payload\n */\nfunction checkAndHandle2FA(payload) {\n // let skippable = false;\n if ('callbacks' in payload) {\n for (const element of payload.callbacks) {\n if (element.type === 'HiddenValueCallback') {\n if (element.input[0].value.includes('skip')) {\n // skippable = true;\n element.input[0].value = 'Skip';\n return {\n need2fa: true,\n payload,\n };\n }\n }\n if (element.type === 'NameCallback') {\n if (element.output[0].value.includes('code')) {\n // skippable = false;\n printMessage('2FA is enabled and required for this user...');\n const code = readlineSync.question(`${element.output[0].value}: `);\n element.input[0].value = code;\n return {\n need2fa: true,\n payload,\n };\n }\n }\n }\n // console.info(\"NO2FA\");\n return {\n need2fa: false,\n payload,\n };\n }\n // console.info(\"NO2FA\");\n return {\n need2fa: false,\n payload,\n };\n}\n\n/**\n * Helper function to set the default realm by deployment type\n * @param {string} deploymentType deployment type\n */\nfunction determineDefaultRealm(deploymentType: string) {\n if (state.getRealm() === globalConfig.DEFAULT_REALM_KEY) {\n state.setRealm(globalConfig.DEPLOYMENT_TYPE_REALM_MAP[deploymentType]);\n }\n}\n\n/**\n * Helper function to determine the deployment type\n * @returns {Promise<string>} deployment type\n */\nasync function determineDeploymentType(): Promise<string> {\n const cookieValue = state.getCookieValue();\n // https://bugster.forgerock.org/jira/browse/FRAAS-13018\n // There is a chance that this will be blocked due to security concerns and thus is probably best not to keep active\n // if (!cookieValue && getUseBearerTokenForAmApis()) {\n // const token = await getTokenInfo();\n // cookieValue = token.sessionToken;\n // setCookieValue(cookieValue);\n // }\n\n // if we are using a service account, we know it's cloud\n if (state.getUseBearerTokenForAmApis())\n return globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY;\n\n const fidcClientId = 'idmAdminClient';\n const forgeopsClientId = 'idm-admin-ui';\n\n const verifier = encodeBase64Url(randomBytes(32));\n const challenge = encodeBase64Url(\n createHash('sha256').update(verifier).digest()\n );\n const challengeMethod = 'S256';\n const redirectURL = url.resolve(state.getHost(), redirectUrlTemplate);\n\n const config = {\n maxRedirects: 0,\n headers: {\n [state.getCookieName()]: state.getCookieValue(),\n },\n };\n let bodyFormData = `redirect_uri=${redirectURL}&scope=${idmAdminScopes}&response_type=code&client_id=${fidcClientId}&csrf=${cookieValue}&decision=allow&code_challenge=${challenge}&code_challenge_method=${challengeMethod}`;\n\n let deploymentType = globalConfig.CLASSIC_DEPLOYMENT_TYPE_KEY;\n try {\n await authorize(bodyFormData, config);\n } catch (e) {\n // debugMessage(e.response);\n if (\n e.response?.status === 302 &&\n e.response.headers?.location?.indexOf('code=') > -1\n ) {\n verboseMessage(`ForgeRock Identity Cloud`['brightCyan'] + ` detected.`);\n deploymentType = globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY;\n } else {\n try {\n bodyFormData = `redirect_uri=${redirectURL}&scope=${idmAdminScopes}&response_type=code&client_id=${forgeopsClientId}&csrf=${state.getCookieValue()}&decision=allow&code_challenge=${challenge}&code_challenge_method=${challengeMethod}`;\n await authorize(bodyFormData, config);\n } catch (ex) {\n if (\n ex.response?.status === 302 &&\n ex.response.headers?.location?.indexOf('code=') > -1\n ) {\n adminClientId = forgeopsClientId;\n verboseMessage(`ForgeOps deployment`['brightCyan'] + ` detected.`);\n deploymentType = globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY;\n } else {\n verboseMessage(`Classic deployment`['brightCyan'] + ` detected.`);\n }\n }\n }\n }\n return deploymentType;\n}\n\n/**\n * Helper function to extract the semantic version string from a version info object\n * @param {Object} versionInfo version info object\n * @returns {String} semantic version\n */\nasync function getSemanticVersion(versionInfo) {\n if ('version' in versionInfo) {\n const versionString = versionInfo.version;\n const rx = /([\\d]\\.[\\d]\\.[\\d](\\.[\\d])*)/g;\n const version = versionString.match(rx);\n return version[0];\n }\n throw new Error('Cannot extract semantic version from version info object.');\n}\n\n/**\n * Helper function to authenticate and obtain and store session cookie\n * @returns {string} Session token or null\n */\nasync function authenticate(\n username: string,\n password: string\n): Promise<string> {\n const config = {\n headers: {\n 'X-OpenAM-Username': username,\n 'X-OpenAM-Password': password,\n },\n };\n const response1 = await step({}, config);\n const skip2FA = checkAndHandle2FA(response1);\n let response2 = {};\n if (skip2FA.need2fa) {\n response2 = await step(skip2FA.payload);\n } else {\n response2 = skip2FA.payload;\n }\n if ('tokenId' in response2) {\n return response2['tokenId'] as string;\n }\n return null;\n}\n\n/**\n * Helper function to obtain an oauth2 authorization code\n * @param {string} redirectURL oauth2 redirect uri\n * @param {string} codeChallenge PKCE code challenge\n * @param {string} codeChallengeMethod PKCE code challenge method\n * @returns {string} oauth2 authorization code or null\n */\nasync function getAuthCode(redirectURL, codeChallenge, codeChallengeMethod) {\n try {\n const bodyFormData = `redirect_uri=${redirectURL}&scope=${idmAdminScopes}&response_type=code&client_id=${adminClientId}&csrf=${state.getCookieValue()}&decision=allow&code_challenge=${codeChallenge}&code_challenge_method=${codeChallengeMethod}`;\n const config = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n maxRedirects: 0,\n };\n let response = undefined;\n try {\n response = await authorize(bodyFormData, config);\n } catch (error) {\n response = error.response;\n }\n if (response.status < 200 || response.status > 399) {\n printMessage('error getting auth code', 'error');\n printMessage(\n 'likely cause: mismatched parameters with OAuth client config',\n 'error'\n );\n return null;\n }\n const redirectLocationURL = response.headers?.location;\n const queryObject = url.parse(redirectLocationURL, true).query;\n if ('code' in queryObject) {\n return queryObject.code;\n }\n printMessage('auth code not found', 'error');\n return null;\n } catch (error) {\n printMessage(`error getting auth code - ${error.message}`, 'error');\n printMessage(error.response?.data, 'error');\n debugMessage(error.stack);\n return null;\n }\n}\n\n/**\n * Helper function to obtain oauth2 access token\n * @returns {Promise<string | null>} access token or null\n */\nasync function getAccessTokenForUser(): Promise<string | null> {\n try {\n const verifier = encodeBase64Url(randomBytes(32));\n const challenge = encodeBase64Url(\n createHash('sha256').update(verifier).digest()\n );\n const challengeMethod = 'S256';\n const redirectURL = url.resolve(state.getHost(), redirectUrlTemplate);\n const authCode = await getAuthCode(redirectURL, challenge, challengeMethod);\n if (authCode == null) {\n printMessage('error getting auth code', 'error');\n return null;\n }\n let response = null;\n if (state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY) {\n const config = {\n auth: {\n username: adminClientId,\n password: adminClientPassword,\n },\n };\n const bodyFormData = `redirect_uri=${redirectURL}&grant_type=authorization_code&code=${authCode}&code_verifier=${verifier}`;\n response = await accessToken(bodyFormData, config);\n } else {\n const bodyFormData = `client_id=${adminClientId}&redirect_uri=${redirectURL}&grant_type=authorization_code&code=${authCode}&code_verifier=${verifier}`;\n response = await accessToken(bodyFormData);\n }\n if ('access_token' in response.data) {\n return response.data.access_token;\n }\n printMessage('No access token in response.', 'error');\n } catch (error) {\n debugMessage(`Error getting access token for user: ${error}`);\n debugMessage(error.response?.data);\n }\n return null;\n}\n\nfunction createPayload(serviceAccountId: string) {\n const u = parseUrl(state.getHost());\n const aud = `${u.origin}:${\n u.port ? u.port : u.protocol === 'https' ? '443' : '80'\n }${u.pathname}/oauth2/access_token`;\n\n // Cross platform way of setting JWT expiry time 3 minutes in the future, expressed as number of seconds since EPOCH\n const exp = Math.floor(new Date().getTime() / 1000 + 180);\n\n // A unique ID for the JWT which is required when requesting the openid scope\n const jti = v4();\n\n const iss = serviceAccountId;\n const sub = serviceAccountId;\n\n // Create the payload for our bearer token\n const payload = { iss, sub, aud, exp, jti };\n\n return payload;\n}\n\n/**\n * Get access token for service account\n * @param {string} serviceAccountId UUID of service account\n * @param {JwkRsa} jwk Java Wek Key\n * @returns {string | null} Access token or null\n */\nexport async function getAccessTokenForServiceAccount(\n serviceAccountId: string,\n jwk: JwkRsa\n): Promise<string | null> {\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: start`);\n const payload = createPayload(serviceAccountId);\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: payload:`);\n debugMessage(payload);\n const jwt = await createSignedJwtToken(payload, jwk);\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: jwt:`);\n debugMessage(jwt);\n const bodyFormData = `assertion=${jwt}&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=${serviceAccountScopes}`;\n const response = await accessToken(bodyFormData);\n if ('access_token' in response.data) {\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: token:`);\n debugMessage(response.data.access_token);\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: end`);\n return response.data.access_token;\n }\n debugMessage(\n `AuthenticateOps.getAccessTokenForServiceAccount: No access token in response.`\n );\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: end`);\n return null;\n}\n\nasync function determineDeploymentTypeAndDefaultRealmAndVersion() {\n debugMessage(\n `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: start`\n );\n if (!state.getDeploymentType()) {\n state.setDeploymentType(await determineDeploymentType());\n }\n determineDefaultRealm(state.getDeploymentType());\n\n const versionInfo = (await getServerVersionInfo()).data;\n\n // https://github.com/rockcarver/frodo-cli/issues/109\n debugMessage(`Full version: ${versionInfo.fullVersion}`);\n\n const version = await getSemanticVersion(versionInfo);\n state.setAmVersion(version);\n debugMessage(\n `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: end`\n );\n}\n\nasync function getLoggedInSubject(): Promise<string> {\n let subjectString = `user ${state.getUsername()}`;\n if (state.getUseBearerTokenForAmApis()) {\n const name = (\n await getManagedObject('svcacct', state.getServiceAccountId(), ['name'])\n ).data.name;\n subjectString = `service account ${name} [${state.getServiceAccountId()}]`;\n }\n return subjectString;\n}\n\n/**\n * Get tokens\n * @param {boolean} save true to save a connection profile upon successful authentication, false otherwise\n * @returns {Promise<boolean>} true if tokens were successfully obtained, false otherwise\n */\nexport async function getTokens(): Promise<boolean> {\n if (!state.getHost()) {\n printMessage(\n `No host specified and FRODO_HOST env variable not set!`,\n 'error'\n );\n return false;\n }\n try {\n // if username/password on cli are empty, try to read from connections.json\n if (\n state.getUsername() == null &&\n state.getPassword() == null &&\n !state.getServiceAccountId() &&\n !state.getServiceAccountJwk()\n ) {\n const conn = await getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n state.setAuthenticationService(conn.authenticationService);\n state.setAuthenticationHeaderOverrides(\n conn.authenticationHeaderOverrides\n );\n state.setServiceAccountId(conn.svcacctId);\n state.setServiceAccountJwk(conn.svcacctJwk);\n } else {\n return false;\n }\n }\n // now that we have the full tenant URL we can lookup the cookie name\n state.setCookieName(await determineCookieName());\n\n // use service account to login?\n if (state.getServiceAccountId() && state.getServiceAccountJwk()) {\n debugMessage(\n `AuthenticateOps.getTokens: Authenticating with service account ${state.getServiceAccountId()}`\n );\n try {\n const token = await getAccessTokenForServiceAccount(\n state.getServiceAccountId(),\n state.getServiceAccountJwk()\n );\n state.setBearerToken(token);\n state.setUseBearerTokenForAmApis(true);\n await determineDeploymentTypeAndDefaultRealmAndVersion();\n } catch (saErr) {\n throw new Error(\n `Service account login error: ${\n saErr.response?.data?.error_description ||\n saErr.response?.data?.message\n }`\n );\n }\n }\n // use user account to login\n else if (state.getUsername() && state.getPassword()) {\n debugMessage(\n `AuthenticateOps.getTokens: Authenticating with user account ${state.getUsername()}`\n );\n const token = await authenticate(\n state.getUsername(),\n state.getPassword()\n );\n if (token) state.setCookieValue(token);\n await determineDeploymentTypeAndDefaultRealmAndVersion();\n if (\n state.getCookieValue() &&\n !state.getBearerToken() &&\n (state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY ||\n state.getDeploymentType() ===\n globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY)\n ) {\n const accessToken = await getAccessTokenForUser();\n if (accessToken) state.setBearerToken(accessToken);\n }\n }\n // incomplete or no credentials\n else {\n printMessage(`Incomplete or no credentials!`, 'error');\n return false;\n }\n if (\n state.getCookieValue() ||\n (state.getUseBearerTokenForAmApis() && state.getBearerToken())\n ) {\n // https://github.com/rockcarver/frodo-cli/issues/102\n printMessage(\n `Connected to ${state.getHost()} [${\n state.getRealm() ? state.getRealm() : 'root'\n }] as ${await getLoggedInSubject()}`,\n 'info'\n );\n return true;\n }\n } catch (error) {\n // regular error\n printMessage(error.message, 'error');\n // axios error am api\n printMessage(error.response?.data?.message, 'error');\n // axios error am oauth2 api\n printMessage(error.response?.data?.error_description, 'error');\n // axios error data\n debugMessage(error.response?.data);\n // stack trace\n debugMessage(error.stack || new Error().stack);\n }\n return false;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AuthenticateOps.js","names":["adminClientPassword","redirectUrlTemplate","idmAdminScopes","serviceAccountScopes","adminClientId","determineCookieName","data","getServerInfo","debugMessage","cookieName","error","printMessage","stack","checkAndHandle2FA","payload","element","callbacks","type","input","value","includes","need2fa","output","code","readlineSync","question","determineDefaultRealm","deploymentType","state","getRealm","globalConfig","DEFAULT_REALM_KEY","setRealm","DEPLOYMENT_TYPE_REALM_MAP","determineDeploymentType","cookieValue","getCookieValue","getUseBearerTokenForAmApis","CLOUD_DEPLOYMENT_TYPE_KEY","fidcClientId","forgeopsClientId","verifier","encodeBase64Url","randomBytes","challenge","createHash","update","digest","challengeMethod","redirectURL","url","resolve","getHost","config","maxRedirects","headers","getCookieName","bodyFormData","CLASSIC_DEPLOYMENT_TYPE_KEY","authorize","e","response","status","location","indexOf","verboseMessage","ex","FORGEOPS_DEPLOYMENT_TYPE_KEY","getSemanticVersion","versionInfo","versionString","version","rx","match","Error","authenticate","username","password","response1","step","skip2FA","response2","getAuthCode","codeChallenge","codeChallengeMethod","undefined","redirectLocationURL","queryObject","parse","query","message","getAccessTokenForUser","authCode","getDeploymentType","auth","accessToken","access_token","createPayload","serviceAccountId","u","parseUrl","aud","origin","port","protocol","pathname","exp","Math","floor","Date","getTime","jti","v4","iss","sub","getAccessTokenForServiceAccount","jwk","jwt","createSignedJwtToken","determineDeploymentTypeAndDefaultRealmAndVersion","setDeploymentType","getServerVersionInfo","fullVersion","setAmVersion","getLoggedInSubject","subjectString","getUsername","name","getManagedObject","getServiceAccountId","getTokens","getPassword","getServiceAccountJwk","conn","getConnectionProfile","setHost","tenant","setUsername","setPassword","setAuthenticationService","authenticationService","setAuthenticationHeaderOverrides","authenticationHeaderOverrides","setServiceAccountId","svcacctId","setServiceAccountJwk","svcacctJwk","setCookieName","token","setBearerToken","setUseBearerTokenForAmApis","saErr","error_description","setCookieValue","getBearerToken"],"sources":["ops/AuthenticateOps.ts"],"sourcesContent":["import url from 'url';\nimport { createHash, randomBytes } from 'crypto';\nimport readlineSync from 'readline-sync';\nimport { encodeBase64Url } from '../api/utils/Base64';\nimport * as state from '../shared/State';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { debugMessage, printMessage, verboseMessage } from './utils/Console';\nimport { getServerInfo, getServerVersionInfo } from '../api/ServerInfoApi';\nimport { step } from '../api/AuthenticateApi';\nimport { accessToken, authorize } from '../api/OAuth2OIDCApi';\nimport { getConnectionProfile } from './ConnectionProfileOps';\nimport { v4 } from 'uuid';\nimport { parseUrl } from '../api/utils/ApiUtils';\nimport { JwkRsa, createSignedJwtToken } from './JoseOps';\nimport { getManagedObject } from '../api/ManagedObjectApi';\n\nconst adminClientPassword = 'doesnotmatter';\nconst redirectUrlTemplate = '/platform/appAuthHelperRedirect.html';\n\nconst idmAdminScopes = 'fr:idm:* openid';\nconst serviceAccountScopes = 'fr:am:* fr:idm:* fr:idc:esv:*';\n\nlet adminClientId = 'idmAdminClient';\n\n/**\n * Helper function to get cookie name\n * @returns {String} cookie name\n */\nasync function determineCookieName() {\n try {\n const { data } = await getServerInfo();\n debugMessage(\n `AuthenticateOps.getCookieName: cookieName=${data.cookieName}`\n );\n return data.cookieName;\n } catch (error) {\n printMessage(`Error getting cookie name: ${error}`, 'error');\n debugMessage(error.stack);\n return null;\n }\n}\n\n/**\n * Helper function to determine if this is a setup mfa prompt in the ID Cloud tenant admin login journey\n * @param {Object} payload response from the previous authentication journey step\n * @returns {Object} an object indicating if 2fa is required and the original payload\n */\nfunction checkAndHandle2FA(payload) {\n // let skippable = false;\n if ('callbacks' in payload) {\n for (const element of payload.callbacks) {\n if (element.type === 'HiddenValueCallback') {\n if (element.input[0].value.includes('skip')) {\n // skippable = true;\n element.input[0].value = 'Skip';\n return {\n need2fa: true,\n payload,\n };\n }\n }\n if (element.type === 'NameCallback') {\n if (element.output[0].value.includes('code')) {\n // skippable = false;\n printMessage('2FA is enabled and required for this user...');\n const code = readlineSync.question(`${element.output[0].value}: `);\n element.input[0].value = code;\n return {\n need2fa: true,\n payload,\n };\n }\n }\n }\n // console.info(\"NO2FA\");\n return {\n need2fa: false,\n payload,\n };\n }\n // console.info(\"NO2FA\");\n return {\n need2fa: false,\n payload,\n };\n}\n\n/**\n * Helper function to set the default realm by deployment type\n * @param {string} deploymentType deployment type\n */\nfunction determineDefaultRealm(deploymentType: string) {\n if (\n !state.getRealm() ||\n state.getRealm() === globalConfig.DEFAULT_REALM_KEY\n ) {\n state.setRealm(globalConfig.DEPLOYMENT_TYPE_REALM_MAP[deploymentType]);\n }\n}\n\n/**\n * Helper function to determine the deployment type\n * @returns {Promise<string>} deployment type\n */\nasync function determineDeploymentType(): Promise<string> {\n const cookieValue = state.getCookieValue();\n // https://bugster.forgerock.org/jira/browse/FRAAS-13018\n // There is a chance that this will be blocked due to security concerns and thus is probably best not to keep active\n // if (!cookieValue && getUseBearerTokenForAmApis()) {\n // const token = await getTokenInfo();\n // cookieValue = token.sessionToken;\n // setCookieValue(cookieValue);\n // }\n\n // if we are using a service account, we know it's cloud\n if (state.getUseBearerTokenForAmApis())\n return globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY;\n\n const fidcClientId = 'idmAdminClient';\n const forgeopsClientId = 'idm-admin-ui';\n\n const verifier = encodeBase64Url(randomBytes(32));\n const challenge = encodeBase64Url(\n createHash('sha256').update(verifier).digest()\n );\n const challengeMethod = 'S256';\n const redirectURL = url.resolve(state.getHost(), redirectUrlTemplate);\n\n const config = {\n maxRedirects: 0,\n headers: {\n [state.getCookieName()]: state.getCookieValue(),\n },\n };\n let bodyFormData = `redirect_uri=${redirectURL}&scope=${idmAdminScopes}&response_type=code&client_id=${fidcClientId}&csrf=${cookieValue}&decision=allow&code_challenge=${challenge}&code_challenge_method=${challengeMethod}`;\n\n let deploymentType = globalConfig.CLASSIC_DEPLOYMENT_TYPE_KEY;\n try {\n await authorize(bodyFormData, config);\n } catch (e) {\n // debugMessage(e.response);\n if (\n e.response?.status === 302 &&\n e.response.headers?.location?.indexOf('code=') > -1\n ) {\n verboseMessage(`ForgeRock Identity Cloud`['brightCyan'] + ` detected.`);\n deploymentType = globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY;\n } else {\n try {\n bodyFormData = `redirect_uri=${redirectURL}&scope=${idmAdminScopes}&response_type=code&client_id=${forgeopsClientId}&csrf=${state.getCookieValue()}&decision=allow&code_challenge=${challenge}&code_challenge_method=${challengeMethod}`;\n await authorize(bodyFormData, config);\n } catch (ex) {\n if (\n ex.response?.status === 302 &&\n ex.response.headers?.location?.indexOf('code=') > -1\n ) {\n adminClientId = forgeopsClientId;\n verboseMessage(`ForgeOps deployment`['brightCyan'] + ` detected.`);\n deploymentType = globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY;\n } else {\n verboseMessage(`Classic deployment`['brightCyan'] + ` detected.`);\n }\n }\n }\n }\n return deploymentType;\n}\n\n/**\n * Helper function to extract the semantic version string from a version info object\n * @param {Object} versionInfo version info object\n * @returns {String} semantic version\n */\nasync function getSemanticVersion(versionInfo) {\n if ('version' in versionInfo) {\n const versionString = versionInfo.version;\n const rx = /([\\d]\\.[\\d]\\.[\\d](\\.[\\d])*)/g;\n const version = versionString.match(rx);\n return version[0];\n }\n throw new Error('Cannot extract semantic version from version info object.');\n}\n\n/**\n * Helper function to authenticate and obtain and store session cookie\n * @returns {string} Session token or null\n */\nasync function authenticate(\n username: string,\n password: string\n): Promise<string> {\n const config = {\n headers: {\n 'X-OpenAM-Username': username,\n 'X-OpenAM-Password': password,\n },\n };\n const response1 = await step({}, config);\n const skip2FA = checkAndHandle2FA(response1);\n let response2 = {};\n if (skip2FA.need2fa) {\n response2 = await step(skip2FA.payload);\n } else {\n response2 = skip2FA.payload;\n }\n if ('tokenId' in response2) {\n return response2['tokenId'] as string;\n }\n return null;\n}\n\n/**\n * Helper function to obtain an oauth2 authorization code\n * @param {string} redirectURL oauth2 redirect uri\n * @param {string} codeChallenge PKCE code challenge\n * @param {string} codeChallengeMethod PKCE code challenge method\n * @returns {string} oauth2 authorization code or null\n */\nasync function getAuthCode(redirectURL, codeChallenge, codeChallengeMethod) {\n try {\n const bodyFormData = `redirect_uri=${redirectURL}&scope=${idmAdminScopes}&response_type=code&client_id=${adminClientId}&csrf=${state.getCookieValue()}&decision=allow&code_challenge=${codeChallenge}&code_challenge_method=${codeChallengeMethod}`;\n const config = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n maxRedirects: 0,\n };\n let response = undefined;\n try {\n response = await authorize(bodyFormData, config);\n } catch (error) {\n response = error.response;\n }\n if (response.status < 200 || response.status > 399) {\n printMessage('error getting auth code', 'error');\n printMessage(\n 'likely cause: mismatched parameters with OAuth client config',\n 'error'\n );\n return null;\n }\n const redirectLocationURL = response.headers?.location;\n const queryObject = url.parse(redirectLocationURL, true).query;\n if ('code' in queryObject) {\n return queryObject.code;\n }\n printMessage('auth code not found', 'error');\n return null;\n } catch (error) {\n printMessage(`error getting auth code - ${error.message}`, 'error');\n printMessage(error.response?.data, 'error');\n debugMessage(error.stack);\n return null;\n }\n}\n\n/**\n * Helper function to obtain oauth2 access token\n * @returns {Promise<string | null>} access token or null\n */\nasync function getAccessTokenForUser(): Promise<string | null> {\n debugMessage(`AuthenticateOps.getAccessTokenForUser: start`);\n try {\n const verifier = encodeBase64Url(randomBytes(32));\n const challenge = encodeBase64Url(\n createHash('sha256').update(verifier).digest()\n );\n const challengeMethod = 'S256';\n const redirectURL = url.resolve(state.getHost(), redirectUrlTemplate);\n const authCode = await getAuthCode(redirectURL, challenge, challengeMethod);\n if (authCode == null) {\n printMessage('error getting auth code', 'error');\n return null;\n }\n let response = null;\n if (state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY) {\n const config = {\n auth: {\n username: adminClientId,\n password: adminClientPassword,\n },\n };\n const bodyFormData = `redirect_uri=${redirectURL}&grant_type=authorization_code&code=${authCode}&code_verifier=${verifier}`;\n response = await accessToken(bodyFormData, config);\n } else {\n const bodyFormData = `client_id=${adminClientId}&redirect_uri=${redirectURL}&grant_type=authorization_code&code=${authCode}&code_verifier=${verifier}`;\n response = await accessToken(bodyFormData);\n }\n if ('access_token' in response.data) {\n debugMessage(`AuthenticateOps.getAccessTokenForUser: end with token`);\n return response.data.access_token;\n }\n printMessage('No access token in response.', 'error');\n } catch (error) {\n debugMessage(`Error getting access token for user: ${error}`);\n debugMessage(error.response?.data);\n }\n debugMessage(`AuthenticateOps.getAccessTokenForUser: end without token`);\n return null;\n}\n\nfunction createPayload(serviceAccountId: string) {\n const u = parseUrl(state.getHost());\n const aud = `${u.origin}:${\n u.port ? u.port : u.protocol === 'https' ? '443' : '80'\n }${u.pathname}/oauth2/access_token`;\n\n // Cross platform way of setting JWT expiry time 3 minutes in the future, expressed as number of seconds since EPOCH\n const exp = Math.floor(new Date().getTime() / 1000 + 180);\n\n // A unique ID for the JWT which is required when requesting the openid scope\n const jti = v4();\n\n const iss = serviceAccountId;\n const sub = serviceAccountId;\n\n // Create the payload for our bearer token\n const payload = { iss, sub, aud, exp, jti };\n\n return payload;\n}\n\n/**\n * Get access token for service account\n * @param {string} serviceAccountId UUID of service account\n * @param {JwkRsa} jwk Java Wek Key\n * @returns {string | null} Access token or null\n */\nexport async function getAccessTokenForServiceAccount(\n serviceAccountId: string,\n jwk: JwkRsa\n): Promise<string | null> {\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: start`);\n const payload = createPayload(serviceAccountId);\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: payload:`);\n debugMessage(payload);\n const jwt = await createSignedJwtToken(payload, jwk);\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: jwt:`);\n debugMessage(jwt);\n const bodyFormData = `assertion=${jwt}&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=${serviceAccountScopes}`;\n const response = await accessToken(bodyFormData);\n if ('access_token' in response.data) {\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: token:`);\n debugMessage(response.data.access_token);\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: end`);\n return response.data.access_token;\n }\n debugMessage(\n `AuthenticateOps.getAccessTokenForServiceAccount: No access token in response.`\n );\n debugMessage(`AuthenticateOps.getAccessTokenForServiceAccount: end`);\n return null;\n}\n\nasync function determineDeploymentTypeAndDefaultRealmAndVersion() {\n debugMessage(\n `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: start`\n );\n if (!state.getDeploymentType()) {\n state.setDeploymentType(await determineDeploymentType());\n }\n determineDefaultRealm(state.getDeploymentType());\n debugMessage(\n `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: realm=${state.getRealm()}, type=${state.getDeploymentType()}`\n );\n\n const versionInfo = (await getServerVersionInfo()).data;\n\n // https://github.com/rockcarver/frodo-cli/issues/109\n debugMessage(`Full version: ${versionInfo.fullVersion}`);\n\n const version = await getSemanticVersion(versionInfo);\n state.setAmVersion(version);\n debugMessage(\n `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: end`\n );\n}\n\nasync function getLoggedInSubject(): Promise<string> {\n let subjectString = `user ${state.getUsername()}`;\n if (state.getUseBearerTokenForAmApis()) {\n const name = (\n await getManagedObject('svcacct', state.getServiceAccountId(), ['name'])\n ).data.name;\n subjectString = `service account ${name} [${state.getServiceAccountId()}]`;\n }\n return subjectString;\n}\n\n/**\n * Get tokens\n * @param {boolean} save true to save a connection profile upon successful authentication, false otherwise\n * @returns {Promise<boolean>} true if tokens were successfully obtained, false otherwise\n */\nexport async function getTokens(): Promise<boolean> {\n debugMessage(`AuthenticateOps.getTokens: start`);\n if (!state.getHost()) {\n printMessage(\n `No host specified and FRODO_HOST env variable not set!`,\n 'error'\n );\n return false;\n }\n try {\n // if username/password on cli are empty, try to read from connections.json\n if (\n state.getUsername() == null &&\n state.getPassword() == null &&\n !state.getServiceAccountId() &&\n !state.getServiceAccountJwk()\n ) {\n const conn = await getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n state.setAuthenticationService(conn.authenticationService);\n state.setAuthenticationHeaderOverrides(\n conn.authenticationHeaderOverrides\n );\n state.setServiceAccountId(conn.svcacctId);\n state.setServiceAccountJwk(conn.svcacctJwk);\n } else {\n return false;\n }\n }\n // now that we have the full tenant URL we can lookup the cookie name\n state.setCookieName(await determineCookieName());\n\n // use service account to login?\n if (state.getServiceAccountId() && state.getServiceAccountJwk()) {\n debugMessage(\n `AuthenticateOps.getTokens: Authenticating with service account ${state.getServiceAccountId()}`\n );\n try {\n const token = await getAccessTokenForServiceAccount(\n state.getServiceAccountId(),\n state.getServiceAccountJwk()\n );\n state.setBearerToken(token);\n state.setUseBearerTokenForAmApis(true);\n await determineDeploymentTypeAndDefaultRealmAndVersion();\n } catch (saErr) {\n throw new Error(\n `Service account login error: ${\n saErr.response?.data?.error_description ||\n saErr.response?.data?.message\n }`\n );\n }\n }\n // use user account to login\n else if (state.getUsername() && state.getPassword()) {\n debugMessage(\n `AuthenticateOps.getTokens: Authenticating with user account ${state.getUsername()}`\n );\n const token = await authenticate(\n state.getUsername(),\n state.getPassword()\n );\n if (token) state.setCookieValue(token);\n await determineDeploymentTypeAndDefaultRealmAndVersion();\n debugMessage(`AuthenticateOps.getTokens: before bearer`);\n debugMessage(\n `AuthenticateOps.getTokens: cookie=${state.getCookieValue()}`\n );\n debugMessage(\n `AuthenticateOps.getTokens: bearer=${state.getBearerToken()}`\n );\n debugMessage(\n `AuthenticateOps.getTokens: type=${state.getDeploymentType()}`\n );\n debugMessage(\n `AuthenticateOps.getTokens: condition=${\n state.getCookieValue() &&\n !state.getBearerToken() &&\n (state.getDeploymentType() ===\n globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY ||\n state.getDeploymentType() ===\n globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY)\n }`\n );\n if (\n state.getCookieValue() &&\n !state.getBearerToken() &&\n (state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY ||\n state.getDeploymentType() ===\n globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY)\n ) {\n debugMessage(`AuthenticateOps.getTokens: in bearer`);\n const accessToken = await getAccessTokenForUser();\n if (accessToken) state.setBearerToken(accessToken);\n }\n debugMessage(`AuthenticateOps.getTokens: after bearer`);\n }\n // incomplete or no credentials\n else {\n printMessage(`Incomplete or no credentials!`, 'error');\n return false;\n }\n if (\n state.getCookieValue() ||\n (state.getUseBearerTokenForAmApis() && state.getBearerToken())\n ) {\n // https://github.com/rockcarver/frodo-cli/issues/102\n printMessage(\n `Connected to ${state.getHost()} [${\n state.getRealm() ? state.getRealm() : 'root'\n }] as ${await getLoggedInSubject()}`,\n 'info'\n );\n debugMessage(`AuthenticateOps.getTokens: end with tokens`);\n return true;\n }\n } catch (error) {\n // regular error\n printMessage(error.message, 'error');\n // axios error am api\n printMessage(error.response?.data?.message, 'error');\n // axios error am oauth2 api\n printMessage(error.response?.data?.error_description, 'error');\n // axios error data\n debugMessage(error.response?.data);\n // stack trace\n debugMessage(error.stack || new Error().stack);\n }\n debugMessage(`AuthenticateOps.getTokens: end without tokens`);\n return false;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticateOps.test.js","names":["describe","test","state","setHost","process","env","FRODO_HOST","setRealm","FRODO_USER","FRODO_PASSWORD","setUsername","setPassword","Authenticate","getTokens","expect","getCookieName","toBeTruthy","getCookieValue","getBearerToken"],"sources":["ops/AuthenticateOps.test.ts"],"sourcesContent":["import { Authenticate, state } from '../index';\n\ndescribe('AuthenticationOps', () => {\n test('getTokens() 1: ', async () => {\n state.setHost(process.env.FRODO_HOST || 'frodo-dev');\n state.setRealm('alpha');\n if (\n process.env.FRODO_HOST &&\n process.env.FRODO_USER &&\n process.env.FRODO_PASSWORD\n ) {\n state.setUsername(process.env.FRODO_USER);\n state.setPassword(process.env.FRODO_PASSWORD);\n }\n await Authenticate.getTokens();\n expect(state.getCookieName()).toBeTruthy();\n expect(state.getCookieValue()).toBeTruthy();\n expect(state.getBearerToken()).toBeTruthy();\n });\n});\n"],"mappings":";;AAAA;AAA+C;AAAA;AAE/CA,QAAQ,CAAC,mBAAmB,EAAE,MAAM;EAClCC,IAAI,CAAC,iBAAiB,iCAAE,aAAY;IAClCC,YAAK,CAACC,OAAO,CAACC,OAAO,CAACC,GAAG,CAACC,UAAU,IAAI,WAAW,CAAC;IACpDJ,YAAK,CAACK,QAAQ,CAAC,OAAO,CAAC;IACvB,IACEH,OAAO,CAACC,GAAG,CAACC,UAAU,IACtBF,OAAO,CAACC,GAAG,CAACG,UAAU,IACtBJ,OAAO,CAACC,GAAG,CAACI,cAAc,EAC1B;MACAP,YAAK,CAACQ,WAAW,CAACN,OAAO,CAACC,GAAG,CAACG,UAAU,CAAC;MACzCN,YAAK,CAACS,WAAW,CAACP,OAAO,CAACC,GAAG,CAACI,cAAc,CAAC;IAC/C;IACA,MAAMG,mBAAY,CAACC,SAAS,EAAE;IAC9BC,MAAM,CAACZ,YAAK,CAACa,aAAa,EAAE,CAAC,CAACC,UAAU,EAAE;IAC1CF,MAAM,CAACZ,YAAK,CAACe,cAAc,EAAE,CAAC,CAACD,UAAU,EAAE;IAC3CF,MAAM,CAACZ,YAAK,CAACgB,cAAc,EAAE,CAAC,CAACF,UAAU,EAAE;EAC7C,CAAC,EAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"AuthenticateOps.test.js","names":["matchConfig","defaultMatchRequestsBy","body","order","autoSetupPolly","jest","setTimeout","describe","test","expect","Authenticate","getTokens","toBeDefined","state","setHost","process","env","FRODO_HOST","setRealm","FRODO_REALM","setUsername","FRODO_USERNAME","setPassword","FRODO_PASSWORD","result","toBe","getDeploymentType","toEqual","getCookieName","toBeTruthy","getCookieValue","getBearerToken","toMatchSnapshot"],"sources":["ops/AuthenticateOps.test.ts"],"sourcesContent":["/**\n * To record and update snapshots, you must perform 3 steps in order:\n *\n * 1. Record API responses & update ESM snapshots\n *\n * To record and update ESM snapshots, you must call the test:record_noauth\n * script and override all the connection state variables supplied to the\n * getTokens() function by the test to connect to the env to record from:\n *\n * FRODO_DEBUG=1 FRODO_HOST=https://openam-volker-dev.forgeblocks.com/am \\\n * FRODO_USERNAME=volker.scheuber@forgerock.com FRODO_PASSWORD='S3cr3!S@uc3' \\\n * npm run test:record_noauth AuthenticateOps\n *\n * 2. Update CJS snapshots\n *\n * After recording, the ESM snapshots will already be updated as that happens\n * in one go, but you musty manually update the CJS snapshots by running:\n *\n * FRODO_DEBUG=1 npm run test:update AuthenticateOps\n *\n * 3. Test your changes\n *\n * If 1 and 2 didn't produce any errors, you are ready to run the tests in\n * replay mode and make sure they all succeed as well:\n *\n * npm run test AuthenticateOps\n *\n * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output\n * in case things don't function as expected\n */\nimport { jest } from '@jest/globals';\nimport { Authenticate, state } from '../index';\nimport {\n autoSetupPolly,\n defaultMatchRequestsBy,\n} from '../utils/AutoSetupPolly';\n\n// need to modify the default matching rules to allow the mocking to work for an authentication flow.\nconst matchConfig = defaultMatchRequestsBy();\nmatchConfig.body = false; // oauth flows are tricky because of the PKCE challenge, which is different for each request\nmatchConfig.order = true; // since we instruct Polly not to match the body, we need to enable ordering of the requests\n\nautoSetupPolly(matchConfig);\n\n// Increase timeout for this test as pipeline keeps failing with error:\n// Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.\njest.setTimeout(30000);\n\ndescribe('AuthenticateOps', () => {\n describe('getTokens()', () => {\n test('0: Method is implemented', async () => {\n expect(Authenticate.getTokens).toBeDefined();\n });\n\n test('1: Authenticate successfully as user', async () => {\n state.setHost(\n process.env.FRODO_HOST || 'https://openam-frodo-dev.forgeblocks.com/am'\n );\n state.setRealm(process.env.FRODO_REALM || 'alpha');\n state.setUsername(process.env.FRODO_USERNAME || 'mockUser');\n state.setPassword(process.env.FRODO_PASSWORD || 'mockPassword');\n const result = await Authenticate.getTokens();\n expect(result).toBe(true);\n expect(state.getDeploymentType()).toEqual('cloud');\n expect(state.getCookieName()).toBeTruthy();\n expect(state.getCookieValue()).toBeTruthy();\n expect(state.getBearerToken()).toBeTruthy();\n expect(state.getCookieName()).toMatchSnapshot();\n expect(state.getCookieValue()).toMatchSnapshot();\n expect(state.getBearerToken()).toMatchSnapshot();\n });\n });\n});\n"],"mappings":";;AA8BA;AACA;AACA;AAGiC;AAAA;AAEjC;AACA,IAAMA,WAAW,GAAG,IAAAC,sCAAsB,GAAE;AAC5CD,WAAW,CAACE,IAAI,GAAG,KAAK,CAAC,CAAC;AAC1BF,WAAW,CAACG,KAAK,GAAG,IAAI,CAAC,CAAC;;AAE1B,IAAAC,8BAAc,EAACJ,WAAW,CAAC;;AAE3B;AACA;AACAK,aAAI,CAACC,UAAU,CAAC,KAAK,CAAC;AAEtBC,QAAQ,CAAC,iBAAiB,EAAE,MAAM;EAChCA,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC5BC,IAAI,CAAC,0BAA0B,iCAAE,aAAY;MAC3CC,MAAM,CAACC,mBAAY,CAACC,SAAS,CAAC,CAACC,WAAW,EAAE;IAC9C,CAAC,EAAC;IAEFJ,IAAI,CAAC,sCAAsC,iCAAE,aAAY;MACvDK,YAAK,CAACC,OAAO,CACXC,OAAO,CAACC,GAAG,CAACC,UAAU,IAAI,6CAA6C,CACxE;MACDJ,YAAK,CAACK,QAAQ,CAACH,OAAO,CAACC,GAAG,CAACG,WAAW,IAAI,OAAO,CAAC;MAClDN,YAAK,CAACO,WAAW,CAACL,OAAO,CAACC,GAAG,CAACK,cAAc,IAAI,UAAU,CAAC;MAC3DR,YAAK,CAACS,WAAW,CAACP,OAAO,CAACC,GAAG,CAACO,cAAc,IAAI,cAAc,CAAC;MAC/D,IAAMC,MAAM,SAASd,mBAAY,CAACC,SAAS,EAAE;MAC7CF,MAAM,CAACe,MAAM,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;MACzBhB,MAAM,CAACI,YAAK,CAACa,iBAAiB,EAAE,CAAC,CAACC,OAAO,CAAC,OAAO,CAAC;MAClDlB,MAAM,CAACI,YAAK,CAACe,aAAa,EAAE,CAAC,CAACC,UAAU,EAAE;MAC1CpB,MAAM,CAACI,YAAK,CAACiB,cAAc,EAAE,CAAC,CAACD,UAAU,EAAE;MAC3CpB,MAAM,CAACI,YAAK,CAACkB,cAAc,EAAE,CAAC,CAACF,UAAU,EAAE;MAC3CpB,MAAM,CAACI,YAAK,CAACe,aAAa,EAAE,CAAC,CAACI,eAAe,EAAE;MAC/CvB,MAAM,CAACI,YAAK,CAACiB,cAAc,EAAE,CAAC,CAACE,eAAe,EAAE;MAChDvB,MAAM,CAACI,YAAK,CAACkB,cAAc,EAAE,CAAC,CAACC,eAAe,EAAE;IAClD,CAAC,EAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceAccountOps.test.js","names":["mock","MockAdapter","axios","outputHandler","message","console","log","state","setHost","setRealm","setCookieName","setCookieValue","setDeploymentType","globalConfig","CLOUD_DEPLOYMENT_TYPE_KEY","setDebug","setDebugHandler","setPrintHandler","setCurlirize","setCurlirizeHandler","describe","test","expect","ServiceAccount","createServiceAccount","toBeDefined","moId","moData","name","description","accountStatus","scopes","jwk","createJwkRsa","publicJwk","getJwkRsaPublic","jwks","createJwks","mockCreateManagedObject","mockManagedObjId","mockManagedObj","payload","isEqualJson","toBeTruthy","_id","toBe","toStrictEqual"],"sources":["ops/ServiceAccountOps.test.ts"],"sourcesContent":["import axios from 'axios';\nimport MockAdapter from 'axios-mock-adapter';\nimport { state } from '../index';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { createJwkRsa, createJwks, getJwkRsaPublic } from './JoseOps';\nimport * as ServiceAccount from './ServiceAccountOps';\nimport { mockCreateManagedObject } from '../test/mocks/ForgeRockApiMockEngine';\nimport { isEqualJson } from './utils/OpsUtils';\n\nconst mock = new MockAdapter(axios);\n\nconst outputHandler = (message: string | object) => {\n console.log(message);\n};\n\nstate.setHost('https://openam-frodo-dev.forgeblocks.com/am');\nstate.setRealm('alpha');\nstate.setCookieName('cookieName');\nstate.setCookieValue('cookieValue');\nstate.setDeploymentType(globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY);\nstate.setDebug(true);\nstate.setDebugHandler(outputHandler);\nstate.setPrintHandler(outputHandler);\nstate.setCurlirize(true);\nstate.setCurlirizeHandler(outputHandler);\n\ndescribe('SvcacctOps - createSvcacct()', () => {\n test('createSvcacct() 0: Method is implemented', async () => {\n expect(ServiceAccount.createServiceAccount).toBeDefined();\n });\n\n test('createSvcacct() 1: Create service account', async () => {\n let moId: string | null = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let moData: any | null = null;\n const name = 'sa';\n const description = 'service account';\n const accountStatus = 'Active';\n const scopes = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwk = await createJwkRsa();\n const publicJwk = await getJwkRsaPublic(jwk);\n const jwks = await createJwks(publicJwk);\n mockCreateManagedObject(mock, (mockManagedObjId, mockManagedObj) => {\n moId = mockManagedObjId;\n moData = mockManagedObj;\n });\n const payload = await ServiceAccount.createServiceAccount(\n name,\n description,\n accountStatus,\n scopes,\n jwks\n );\n expect(isEqualJson(payload, moData)).toBeTruthy();\n expect(payload).toBeTruthy();\n expect(payload._id).toBe(moId);\n expect(payload.name).toBe(name);\n expect(payload.description).toBe(description);\n expect(payload.scopes).toStrictEqual(scopes);\n });\n});\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAA+C;AAAA;AAAA;AAAA;AAAA;AAE/C,IAAMA,IAAI,GAAG,IAAIC,yBAAW,CAACC,cAAK,CAAC;AAEnC,IAAMC,aAAa,GAAIC,OAAwB,IAAK;EAClDC,OAAO,CAACC,GAAG,CAACF,OAAO,CAAC;AACtB,CAAC;AAEDG,YAAK,CAACC,OAAO,CAAC,6CAA6C,CAAC;AAC5DD,YAAK,CAACE,QAAQ,CAAC,OAAO,CAAC;AACvBF,YAAK,CAACG,aAAa,CAAC,YAAY,CAAC;AACjCH,YAAK,CAACI,cAAc,CAAC,aAAa,CAAC;AACnCJ,YAAK,CAACK,iBAAiB,CAACC,YAAY,CAACC,yBAAyB,CAAC;AAC/DP,YAAK,CAACQ,QAAQ,CAAC,IAAI,CAAC;AACpBR,YAAK,CAACS,eAAe,CAACb,aAAa,CAAC;AACpCI,YAAK,CAACU,eAAe,CAACd,aAAa,CAAC;AACpCI,YAAK,CAACW,YAAY,CAAC,IAAI,CAAC;AACxBX,YAAK,CAACY,mBAAmB,CAAChB,aAAa,CAAC;AAExCiB,QAAQ,CAAC,8BAA8B,EAAE,MAAM;EAC7CC,IAAI,CAAC,0CAA0C,iCAAE,aAAY;IAC3DC,MAAM,CAACC,cAAc,CAACC,oBAAoB,CAAC,CAACC,WAAW,EAAE;EAC3D,CAAC,EAAC;EAEFJ,IAAI,CAAC,2CAA2C,iCAAE,aAAY;IAC5D,IAAIK,IAAmB,GAAG,IAAI;IAC9B;IACA,IAAIC,MAAkB,GAAG,IAAI;IAC7B,IAAMC,IAAI,GAAG,IAAI;IACjB,IAAMC,WAAW,GAAG,iBAAiB;IACrC,IAAMC,aAAa,GAAG,QAAQ;IAC9B,IAAMC,MAAM,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;IACtD,IAAMC,GAAG,SAAS,IAAAC,qBAAY,GAAE;IAChC,IAAMC,SAAS,SAAS,IAAAC,wBAAe,EAACH,GAAG,CAAC;IAC5C,IAAMI,IAAI,SAAS,IAAAC,mBAAU,EAACH,SAAS,CAAC;IACxC,IAAAI,+CAAuB,EAACtC,IAAI,EAAE,CAACuC,gBAAgB,EAAEC,cAAc,KAAK;MAClEd,IAAI,GAAGa,gBAAgB;MACvBZ,MAAM,GAAGa,cAAc;IACzB,CAAC,CAAC;IACF,IAAMC,OAAO,SAASlB,cAAc,CAACC,oBAAoB,CACvDI,IAAI,EACJC,WAAW,EACXC,aAAa,EACbC,MAAM,EACNK,IAAI,CACL;IACDd,MAAM,CAAC,IAAAoB,qBAAW,EAACD,OAAO,EAAEd,MAAM,CAAC,CAAC,CAACgB,UAAU,EAAE;IACjDrB,MAAM,CAACmB,OAAO,CAAC,CAACE,UAAU,EAAE;IAC5BrB,MAAM,CAACmB,OAAO,CAACG,GAAG,CAAC,CAACC,IAAI,CAACnB,IAAI,CAAC;IAC9BJ,MAAM,CAACmB,OAAO,CAACb,IAAI,CAAC,CAACiB,IAAI,CAACjB,IAAI,CAAC;IAC/BN,MAAM,CAACmB,OAAO,CAACZ,WAAW,CAAC,CAACgB,IAAI,CAAChB,WAAW,CAAC;IAC7CP,MAAM,CAACmB,OAAO,CAACV,MAAM,CAAC,CAACe,aAAa,CAACf,MAAM,CAAC;EAC9C,CAAC,EAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"ServiceAccountOps.test.js","names":["mock","MockAdapter","axios","jest","setTimeout","outputHandler","message","console","log","state","setHost","setRealm","setCookieName","setCookieValue","setDeploymentType","globalConfig","CLOUD_DEPLOYMENT_TYPE_KEY","setDebug","setDebugHandler","setPrintHandler","setCurlirize","setCurlirizeHandler","describe","test","expect","ServiceAccount","createServiceAccount","toBeDefined","moId","moData","name","description","accountStatus","scopes","jwk","createJwkRsa","publicJwk","getJwkRsaPublic","jwks","createJwks","mockCreateManagedObject","mockManagedObjId","mockManagedObj","payload","isEqualJson","toBeTruthy","_id","toBe","toStrictEqual"],"sources":["ops/ServiceAccountOps.test.ts"],"sourcesContent":["import { jest } from '@jest/globals';\nimport axios from 'axios';\nimport MockAdapter from 'axios-mock-adapter';\nimport { state } from '../index';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { createJwkRsa, createJwks, getJwkRsaPublic } from './JoseOps';\nimport * as ServiceAccount from './ServiceAccountOps';\nimport { mockCreateManagedObject } from '../test/mocks/ForgeRockApiMockEngine';\nimport { isEqualJson } from './utils/OpsUtils';\n\nconst mock = new MockAdapter(axios);\n\n// Increase timeout for this test as pipeline keeps failing with error:\n// Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.\njest.setTimeout(30000);\n\nconst outputHandler = (message: string | object) => {\n console.log(message);\n};\n\nstate.setHost('https://openam-frodo-dev.forgeblocks.com/am');\nstate.setRealm('alpha');\nstate.setCookieName('cookieName');\nstate.setCookieValue('cookieValue');\nstate.setDeploymentType(globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY);\nstate.setDebug(true);\nstate.setDebugHandler(outputHandler);\nstate.setPrintHandler(outputHandler);\nstate.setCurlirize(true);\nstate.setCurlirizeHandler(outputHandler);\n\ndescribe('SvcacctOps - createSvcacct()', () => {\n test('createSvcacct() 0: Method is implemented', async () => {\n expect(ServiceAccount.createServiceAccount).toBeDefined();\n });\n\n test('createSvcacct() 1: Create service account', async () => {\n let moId: string | null = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let moData: any | null = null;\n const name = 'sa';\n const description = 'service account';\n const accountStatus = 'Active';\n const scopes = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwk = await createJwkRsa();\n const publicJwk = await getJwkRsaPublic(jwk);\n const jwks = await createJwks(publicJwk);\n mockCreateManagedObject(mock, (mockManagedObjId, mockManagedObj) => {\n moId = mockManagedObjId;\n moData = mockManagedObj;\n });\n const payload = await ServiceAccount.createServiceAccount(\n name,\n description,\n accountStatus,\n scopes,\n jwks\n );\n expect(isEqualJson(payload, moData)).toBeTruthy();\n expect(payload).toBeTruthy();\n expect(payload._id).toBe(moId);\n expect(payload.name).toBe(name);\n expect(payload.description).toBe(description);\n expect(payload.scopes).toStrictEqual(scopes);\n });\n});\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAA+C;AAAA;AAAA;AAAA;AAAA;AAE/C,IAAMA,IAAI,GAAG,IAAIC,yBAAW,CAACC,cAAK,CAAC;;AAEnC;AACA;AACAC,aAAI,CAACC,UAAU,CAAC,KAAK,CAAC;AAEtB,IAAMC,aAAa,GAAIC,OAAwB,IAAK;EAClDC,OAAO,CAACC,GAAG,CAACF,OAAO,CAAC;AACtB,CAAC;AAEDG,YAAK,CAACC,OAAO,CAAC,6CAA6C,CAAC;AAC5DD,YAAK,CAACE,QAAQ,CAAC,OAAO,CAAC;AACvBF,YAAK,CAACG,aAAa,CAAC,YAAY,CAAC;AACjCH,YAAK,CAACI,cAAc,CAAC,aAAa,CAAC;AACnCJ,YAAK,CAACK,iBAAiB,CAACC,YAAY,CAACC,yBAAyB,CAAC;AAC/DP,YAAK,CAACQ,QAAQ,CAAC,IAAI,CAAC;AACpBR,YAAK,CAACS,eAAe,CAACb,aAAa,CAAC;AACpCI,YAAK,CAACU,eAAe,CAACd,aAAa,CAAC;AACpCI,YAAK,CAACW,YAAY,CAAC,IAAI,CAAC;AACxBX,YAAK,CAACY,mBAAmB,CAAChB,aAAa,CAAC;AAExCiB,QAAQ,CAAC,8BAA8B,EAAE,MAAM;EAC7CC,IAAI,CAAC,0CAA0C,iCAAE,aAAY;IAC3DC,MAAM,CAACC,cAAc,CAACC,oBAAoB,CAAC,CAACC,WAAW,EAAE;EAC3D,CAAC,EAAC;EAEFJ,IAAI,CAAC,2CAA2C,iCAAE,aAAY;IAC5D,IAAIK,IAAmB,GAAG,IAAI;IAC9B;IACA,IAAIC,MAAkB,GAAG,IAAI;IAC7B,IAAMC,IAAI,GAAG,IAAI;IACjB,IAAMC,WAAW,GAAG,iBAAiB;IACrC,IAAMC,aAAa,GAAG,QAAQ;IAC9B,IAAMC,MAAM,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;IACtD,IAAMC,GAAG,SAAS,IAAAC,qBAAY,GAAE;IAChC,IAAMC,SAAS,SAAS,IAAAC,wBAAe,EAACH,GAAG,CAAC;IAC5C,IAAMI,IAAI,SAAS,IAAAC,mBAAU,EAACH,SAAS,CAAC;IACxC,IAAAI,+CAAuB,EAACxC,IAAI,EAAE,CAACyC,gBAAgB,EAAEC,cAAc,KAAK;MAClEd,IAAI,GAAGa,gBAAgB;MACvBZ,MAAM,GAAGa,cAAc;IACzB,CAAC,CAAC;IACF,IAAMC,OAAO,SAASlB,cAAc,CAACC,oBAAoB,CACvDI,IAAI,EACJC,WAAW,EACXC,aAAa,EACbC,MAAM,EACNK,IAAI,CACL;IACDd,MAAM,CAAC,IAAAoB,qBAAW,EAACD,OAAO,EAAEd,MAAM,CAAC,CAAC,CAACgB,UAAU,EAAE;IACjDrB,MAAM,CAACmB,OAAO,CAAC,CAACE,UAAU,EAAE;IAC5BrB,MAAM,CAACmB,OAAO,CAACG,GAAG,CAAC,CAACC,IAAI,CAACnB,IAAI,CAAC;IAC9BJ,MAAM,CAACmB,OAAO,CAACb,IAAI,CAAC,CAACiB,IAAI,CAACjB,IAAI,CAAC;IAC/BN,MAAM,CAACmB,OAAO,CAACZ,WAAW,CAAC,CAACgB,IAAI,CAAChB,WAAW,CAAC;IAC7CP,MAAM,CAACmB,OAAO,CAACV,MAAM,CAAC,CAACe,aAAa,CAACf,MAAM,CAAC;EAC9C,CAAC,EAAC;AACJ,CAAC,CAAC"}
@@ -14,7 +14,47 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
14
14
  var _dirname = _path.default.dirname((0, _url.fileURLToPath)(require('url').pathToFileURL(__filename).toString()));
15
15
  var pkg = JSON.parse(_fs.default.readFileSync(_path.default.resolve(_dirname, '../../package.json'), 'utf8'));
16
16
  var _state = {
17
- authenticationHeaderOverrides: {}
17
+ authenticationHeaderOverrides: {},
18
+ printHandler: message => {
19
+ if (!message) return;
20
+ if (typeof message === 'object') {
21
+ console.dir(message, {
22
+ depth: 3
23
+ });
24
+ } else {
25
+ console.log(message);
26
+ }
27
+ },
28
+ verboseHandler: message => {
29
+ if (!message) return;
30
+ if (getVerbose()) {
31
+ if (typeof message === 'object') {
32
+ console.dir(message, {
33
+ depth: 3
34
+ });
35
+ } else {
36
+ console.log(message);
37
+ }
38
+ }
39
+ },
40
+ debugHandler: message => {
41
+ if (!message) return;
42
+ if (getDebug()) {
43
+ if (typeof message === 'object') {
44
+ console.dir(message, {
45
+ depth: 6
46
+ });
47
+ } else {
48
+ console.log(message);
49
+ }
50
+ }
51
+ },
52
+ curlirizeHandler: message => {
53
+ if (!message) return;
54
+ if (getDebug()) {
55
+ console.log(message);
56
+ }
57
+ }
18
58
  };
19
59
  var setHost = host => _state.host = host;
20
60
  exports.setHost = setHost;